【问题标题】:Signing URL in c++ for google bucket upload [closed]在 C++ 中为谷歌存储桶上传签名 URL [关闭]
【发布时间】:2016-06-03 16:46:37
【问题描述】:

我需要在 c++ 中使用 cURL 将图像上传到谷歌云存储桶。 google 不提供 c++ sdk 支持。根据他们的example and pseudo code,我们必须执行以下过程;

块引用

   Policy = Base-64-Encoding-Of(PolicyDocument)
   MessageDigest = SHA256withRSA(SecretKey, Policy)
   Signature = Base64-Encoding-Of(MessageDigest)

按照他们的流程,我已经完成了 base64 编码,但我找不到任何如何执行 SHA256withRSA 的内容? 请帮助我使用 c++ 中的 SHA256withRSA。

【问题讨论】:

  • 也许这可以提供一些线索stackoverflow.com/questions/13419201/…
  • 是的,谢谢@infixed。所以它可以通过openssl rsa签名来完成。如果存在的话,任何人都可以推荐一些c++中的库
  • openssl 也是一个库。它的命令行实用程序只是它的一个前端。
  • 好的,我认为它是一个命令行实用程序。我将尝试实现 openssl 库并找到解决方案。感谢提供线索
  • 取决于您需要多久执行一次。如果您弄清楚命令行的配方,使用system() 调用嵌入它可能会更简单。 (我知道,懒惰,有时可以利用。取决于环境的良性程度)

标签: c++ rsa google-cloud-storage sha256 signing


【解决方案1】:

您可以使用openssl 库或通常与它一起打包的命令行实用程序来生成这样的签名。

因此了解我从未使用过 Google Cloud Platform,并且只是尝试扩展他们的文档,以手动完成您需要的操作

1) 您的 Google Cloud 凭据的 .pem 版本。让我们称之为private.pem

使用https://cloud.google.com/storage/docs/authentication#converting-the-private-key显示的流程

2) 政策文件。按照原始 URL 中给出的示例,使用文本编辑器创建它

 vi policy.txt

3) 该策略文档的 base64 编码。使用 Linux 工具 base64 来实现。你会得到一个很长的字符串。让我们称之为STRINGA。假设它保存在 STRINGA.txt 中

base64 < policy.txt > STRINGA.txt

4) 从 STRINGA 生成的签名

openssl sha -sha256 -sign private.pem &lt; STRINGA.txt | base64 &gt;SIGNED.txt

5) 从包含

的 html 表单执行 POST
<input type="hidden" name="policy" value="Put STRINGA string here">
<input type="hidden" name="signature" value="Put SIGNED string here">

类似于您在原始网址中给出的示例

https://cloud.google.com/storage/docs/xml-api/post-object#usage_and_examples

我从他们的 HTML 代码中提取了他们的示例 base64 编码策略文档,并感兴趣地注意到他们使用 \r\n 作为内部的行尾,但在最后的 } 括号之后没有行尾。

【讨论】:

  • 不幸的是我不能这样做......我没有得到确切的签名文本......所以我已经使用系统调用更改为 gsutil ..非常感谢你的帮助@infixed .. . :)
猜你喜欢
  • 2018-08-30
  • 2021-11-27
  • 2019-09-09
  • 2013-05-07
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多