You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Boto3调用AWS KMS解密CLI加密值时遇UTF-8解码错误的求助

问题原因分析

你遇到的问题核心是密文格式不匹配:AWS CLI执行aws kms encrypt后输出的CiphertextBlob是Base64编码的字符串,但Boto3的kms.decrypt()方法要求CiphertextBlob参数传入的是原始二进制密文数据。

你直接把存储的Base64字符串传给了CiphertextBlob,相当于让KMS去解密Base64编码后的字节,而不是真正的加密密文,所以解密得到的结果是乱码,自然无法用UTF-8解码。

解决办法

你需要先将存储的Base64密文字符串解码为二进制数据,再传给decrypt()方法,具体修改后的代码如下:

import base64
import boto3

kms = boto3.client('kms')
# 假设token是你存储的Base64密文字符串
decoded_ciphertext = base64.b64decode(token)
kms_response = kms.decrypt(CiphertextBlob=decoded_ciphertext)
runner_token = kms_response['Plaintext'].decode('utf-8')
print(runner_token)  # 会输出预期的"test"
额外验证小技巧

如果你想确认CLI加密的输出格式,可以执行以下命令直接获取原始二进制密文(而非Base64编码):

aws kms encrypt --key-id xxx --plaintext "test" --output raw --query CiphertextBlob > encrypted.bin

这个encrypted.bin文件里的内容就是可以直接传给Boto3CiphertextBlob的二进制数据,不过实际存储时用Base64编码的字符串更便于传输和存储,所以解码步骤通常是必要的。

内容的提问来源于stack exchange,提问作者Yannick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 16:47:30