Google 云 KMS:加密有效但解密失败
Google cloud KMS: encryption works but decryption fails
我正在尝试使用 google KMS 工具解密令牌。
运行 在本地,出于某种原因,加密似乎有效但解密无效。
我是运行以下代码:
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"
request = crypto_keys.decrypt(name=name, body={'ciphertext': base64.b64encode("my text").decode('ascii')})
response = request.execute()
最后一行returns 400错误:
HttpError: <HttpError 400 when requesting https://cloudkms.g[...]ion:decrypt?alt=json
returned "Decryption failed: verify that 'name' refers to the correct CryptoKey.">
然而,这个名字实际上似乎是正确的。
令人惊讶的是,将对 decrypt
的调用替换为 encrypt
,我获得了有效输出。
我是不是遗漏了一个明显的错误,或者我应该在项目的 github 上打开一个问题?
编辑:
我试图解密纯文本,这当然没有多大意义(但错误信息有点误导我)。
确保您尝试解密的密文是使用同一密钥加密的。如果您使用另一个密钥进行加密,KMS 会告诉您找不到该密钥,而实际上已找到该密钥但不能用于解密密码。
我认为错误消息 "a bit" 具有误导性。
我正在尝试使用 google KMS 工具解密令牌。 运行 在本地,出于某种原因,加密似乎有效但解密无效。
我是运行以下代码:
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"
request = crypto_keys.decrypt(name=name, body={'ciphertext': base64.b64encode("my text").decode('ascii')})
response = request.execute()
最后一行returns 400错误:
HttpError: <HttpError 400 when requesting https://cloudkms.g[...]ion:decrypt?alt=json
returned "Decryption failed: verify that 'name' refers to the correct CryptoKey.">
然而,这个名字实际上似乎是正确的。
令人惊讶的是,将对 decrypt
的调用替换为 encrypt
,我获得了有效输出。
我是不是遗漏了一个明显的错误,或者我应该在项目的 github 上打开一个问题?
编辑: 我试图解密纯文本,这当然没有多大意义(但错误信息有点误导我)。
确保您尝试解密的密文是使用同一密钥加密的。如果您使用另一个密钥进行加密,KMS 会告诉您找不到该密钥,而实际上已找到该密钥但不能用于解密密码。
我认为错误消息 "a bit" 具有误导性。