我正在尝试使用客户提供的加密密钥将对象上传到S3。http://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html
我的代码如下:
$this->s3->putObject(array(
'Bucket' => $this->bucket,
'Key' => "$filename",
'Body' => $resource,
'ACL' => 'private',
'SSECustomerAlgorithm' => 'AES256',
'SSECustomerKey' => base64_encode('48wk86271sDb23pY23zT5rZJ7q55R7eE'),
'SSECustomerKeyMD5'=> base64_encode(md5('48wk86271sDb23pY23zT5rZJ7q55R7eE'))
));
我得到的错误说:
AWS错误消息:密钥的计算出的MD5哈希与提供的哈希不匹配
我究竟做错了什么?我的密钥48wk86271sDb23pY23zT5rZJ7q55R7eE
是256位。我也尝试过使用base64_encode(md5(key,true))。
该REST API文档指定的用户密码和用户密码MD5都被送到base-64编码...
x-amz服务器端加密客户密钥
使用此标头为Amazon S3提供256位base64编码的加密密钥,以用于加密或解密数据。
x-amz服务器端加密客户密钥MD5
使用此标头提供根据RFC 1321的加密密钥的base64编码的128位MD5摘要。AmazonS3使用此标头进行消息完整性检查,以确保传输加密密钥时不会出错。
...但是,PHP SDK会为您处理这两个编码步骤,因此应在传递参数时不进行任何编码。
'SSECustomerAlgorithm' => 'AES256',
'SSECustomerKey' => 'key_=_string_of_exactly_32_bytes',
'SSECustomerKeyMD5' => md5('key_=_string_of_exactly_32_bytes',true),
当然,您可能希望将32字节的键字符串包含在变量中,而不是将同一文字字符串复制粘贴到代码中两次。第二个参数“ true”md5()
指定要返回SDK所期望的二进制md5哈希值,而不是默认情况下返回的十六进制编码变体。
请记住,使用客户提供的加密密钥时,如果丢失了密钥,则会丢失数据。S3不存储密钥,没有密钥,则无法获取存储的对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句