Google Cloud KMS加密正常但解密失败问题排查求助
解决Google Cloud KMS解密400错误的问题
哈哈,看你最后编辑的内容,确实是踩了个容易忽略的小坑!你之前尝试解密的是明文内容,这就好比拿着一把锁去开一张白纸,KMS自然会报错啦。
为什么会出现这个误导性的错误信息?
KMS返回的"Decryption failed: verify that 'name' refers to the correct CryptoKey."确实容易让人误以为是密钥路径错了,但其实当你传入的不是对应密钥加密生成的有效密文时,KMS也会返回这个模糊的错误提示,这确实有点坑人。
正确的解密流程
要解密,你必须传入同一个密钥加密后得到的密文,而不是把明文做base64编码后传进去。结合你说加密功能正常,修正后的代码应该是这样的:
import base64 import googleapiclient.discovery kms_client = googleapiclient.discovery.build('cloudkms', 'v1') crypto_keys = kms_client.projects().locations().keyRings().cryptoKeys() name = "projects/my-project/locations/my-loc/keyRings/my-kr/cryptoKeys/my-key" # 1. 先通过加密接口获取有效密文 encrypt_request = crypto_keys.encrypt( name=name, body={'plaintext': base64.b64encode(b"my text").decode('ascii')} ) encrypt_response = encrypt_request.execute() valid_ciphertext = encrypt_response['ciphertext'] # 2. 用这个有效密文执行解密 decrypt_request = crypto_keys.decrypt( name=name, body={'ciphertext': valid_ciphertext} ) decrypt_response = decrypt_request.execute() # 3. 解码得到原始明文 original_plaintext = base64.b64decode(decrypt_response['plaintext']).decode('ascii') print(original_plaintext) # 会输出 "my text"
关键注意点
decrypt接口接收的ciphertext参数,必须是KMS的encrypt接口返回的base64编码字符串,而不是你自己对明文做base64编码的结果。- 你之前的代码错误在于,把明文"my text"做了base64编码就当成密文传给解密接口,这完全不符合KMS的解密逻辑,KMS无法识别这种"伪密文",所以报错。
内容的提问来源于stack exchange,提问作者Pascal Delange
相关产品推荐
相关产品推荐

