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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:17:47