gpt4 book ai didi

ruby - 如何在 Ruby 中使用 S3 SSE C(使用客户端提供的 key 的服务器端加密)

转载 作者:数据小太阳 更新时间:2023-10-29 08:10:56 24 4
gpt4 key购买 nike

我正在尝试将文件上传到 S3 并使用 SSE-C encryption options 对其进行加密.我可以在没有 SSE-C 选项的情况下上传,但是当我提供 sse_customer_key 选项时,我收到以下错误:

ArgumentError: header x-amz-server-side-encryption-customer-key has field value "QkExM0JGRTNDMUUyRDRCQzA5NjAwNEQ2MjRBNkExMDYwQzBGQjcxODJDMjM0\nnMUE2MTNENDRCOTcxRjA2Qzk1Mg=", this cannot include CR/LF

我不确定问题是出在我生成的 key 上还是编码上。我在这里尝试过不同的选项,但 AWS 文档不是很清楚。在一般的 SSE-C 文档中,它说您需要提供一个 x-amz-server-side -encryption -customer-key header ,描述如下:

Use this header to provide the 256-bit, base64-encoded encryption key for Amazon S3 to use to encrypt or decrypt your data.

但是,如果我查看 uploading a file 的 Ruby SDK 文档这 3 个选项的描述略有不同

  • :sse_customer_algorithm(字符串)——指定加密对象时使用的算法(例如,
  • :sse_customer_key(字符串)— 指定客户提供的用于 Amazon S3 的加密 key
  • :sse_customer_key_md5 (String) — 根据 RFC 指定加密 key 的 128 位 MD5 摘要

(我没有抄错,AWS 文档就是这么写的一半)

所以 SDK 文档看起来像是您提供了原始的 sse_customer_key,它会代表您对其进行 base64 编码(这对我来说很有意义)。

所以现在我正在构建这样的选项:

  sse_customer_algorithm: :AES256,
sse_customer_key: sse_customer_key,
sse_customer_key_md5: Digest::MD5.hexdigest(sse_customer_key)

我之前尝试过 Base64.encode64(sse_customer_key) 但这给了我一个不同的错误:

Aws::S3::Errors::InvalidArgument: The secret key was invalid for the specified algorithm

我不确定是我生成的 key 不正确还是我提供的 key 不正确(或者这完全是另一个问题)。

这就是我生成 key 的方式:

require "openssl"
OpenSSL::Cipher.new("AES-256-CBC").random_key

最佳答案

哦,您是否注意到您的 key 包含“\n”?这很可能就是您收到 CR/LF 错误的原因:QkExM0JGRTNDMUUyRDRCQzA5NjAwNEQ2MjRBNkExMDYwQzBGQjcxODJDMjM0(\n)nMUE2MTNENDRCOTcxRjA2Qzk1Mg=

正如同事在评论中提到的,strict_encode64是一个选项,因为它符合 RFC 2045。

顺便说一句,我从这里得到了这个见解:https://bugs.ruby-lang.org/issues/14664

希望对您有所帮助! :)

关于ruby - 如何在 Ruby 中使用 S3 SSE C(使用客户端提供的 key 的服务器端加密),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57993969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com