我已经使用此代码在 Golang 中生成了我的 KMS 密钥
// Create the key
result, err := svc.CreateKey(&kms.CreateKeyInput{
Tags: []*kms.Tag{
{
TagKey: aws.String("CreatedBy"),
TagValue: aws.String("User"),
},
},
})
这是在解密期间导致错误的行
//Get body bytes
body, _ := ioutil.ReadAll(resp.Body)
//base64Text := make([]byte, base64.StdEncoding.EncodedLen(len(body)))
//base64.StdEncoding.Encode(base64Text, []byte(body))
//Needs decrypting?
var newfile *bytes.Reader
if decrypt == true {
log.Println("Now decrypting data")
log.Println("resp.SSECustomerAlgorithm : ", resp.SSECustomerAlgorithm)
log.Println("resp.SSEKMSKeyId : ", aws.StringValue(resp.SSEKMSKeyId)) //right key found.
newkms := inputfs.NewKms()
//n := map[string]*string{"CreatedBy": aws.String("User") }
params := &kms.DecryptInput{
CiphertextBlob: body,
//EncryptionContext:n,
}
output, err := newkms.Decrypt(params)
if err != nil {
log.Println("Decrypt error :", err)
}
newbody := output.Plaintext
newfile = bytes.NewReader(newbody)
}
解密错误
Decrypt error : InvalidCiphertextException:
status code: 400, request id: b69a8634-1784-4c57-8d3d-2439041249fe
这可能是什么原因造成的?我所做的一切似乎都不起作用。这是一个相关的问题:Decrypting using AWS go sdk但我没有看到答案。
事实证明我的对象已经被解密了。
我的对象最初是使用 S3 PUTobject 操作进行 KMS 加密的。
AWS S3 在 S3 GETobject 操作上自动解密此类对象。
我实际上可以以明文形式获取特定对象,因此这支持了上述说法。
请参阅 请求标头和 Amazon S3 API