我有一个存储在使用以下命令行生成的 Google Cloud Storage 存储桶中的加密文件:
gcloud kms encrypt --location=global --keyring=my-keyring --key=-my-key --plaintext-file=my-file --ciphertext-file=my-file.enc
我现在正在尝试使用以下代码在 Cloud Run 服务中解密此类文件:
const kms = require('@google-cloud/kms');
const client = new kms.KeyManagementServiceClient();
const file = storage.bucket("my-bucket").file('my-file.enc');
const name = client.cryptoKeyPath( 'projectId', 'global', 'my-keyring', 'my-key' );
let encrypted = (await file.download())[0];
const [result] = await client.decrypt({name, encrypted });
我收到以下错误:
Error: Decryption failed: verify that 'name' refers to the correct CryptoKey.
其中,根据这具有误导性,应被视为未正确破译。我无法摆脱在某处缺少 base64 编码/解码的感觉,但我似乎没有找到解决方案。
如果我从命令行运行解密它就可以了。
非常感谢任何帮助。
谢谢。
编辑:感谢这个很棒的社区,问题解决了。以下是完成这项工作的步骤,以防其他人面临同样的问题:
使用以下命令行加密文件并通过 Web UI 上传。
gcloud kms encrypt --location=global --keyring=my-keyring --key=-my-key --plaintext-file=my-file --ciphertext-file=my-file.enc
使用以下代码解密:
const kms = require('@google-cloud/kms');
const client = new kms.KeyManagementServiceClient();
const file = storage.bucket("my-bucket").file('my-file.enc');
const name = client.cryptoKeyPath( 'projectId', 'global', 'my-keyring', 'my-key' );
let encrypted = (await file.download())[0];
const ciphertext = encrypted .toString('base64');
const [result] = await client.decrypt({name, ciphertext});
console.log(Buffer.from(result.plaintext, 'base64').toString('utf8'))