Google cloud kms 无法使用@google cloud/kms nodejs模块解密机密

Google cloud kms 无法使用@google cloud/kms nodejs模块解密机密,google-cloud-kms,Google Cloud Kms,代码: encryptedWebhookSecret是使用@google cloud/storage client进行下载()操作的结果。这将返回一个[Buffer],我将其转换为字符串。我记录加密字符串,它的值是正确的。我可以使用命令行中的gsutil下载加密的秘密,gcloud kms decrypt工作正常 此错误似乎表明字符串编码不正确(是否应为utf8?) PROJECT、KEYRING和KEY的值都经过了双重和三重检查,都是正确的 错误: 错误:错误:Object.decode处错误

代码:

encryptedWebhookSecret是使用@google cloud/storage client进行下载()操作的结果。这将返回一个[Buffer],我将其转换为字符串。我记录加密字符串,它的值是正确的。我可以使用命令行中的
gsutil
下载加密的秘密,
gcloud kms decrypt
工作正常

此错误似乎表明字符串编码不正确(是否应为utf8?)

PROJECT、KEYRING和KEY的值都经过了双重和三重检查,都是正确的

错误:

错误:错误:Object.decode处错误编码(本机)无效(/user\u code/node\u modules/@google cloud/kms/node\u modules/@protobufjs/base64/index.js:105:19)在Type.DecryptRequest$fromObject[作为fromObject](在Codegen处求值(/user\u code/node\u modules/@google cloud/kms/node\u modules/@protobufjs/Codegen/index.js:50:33),:12:15)在Object.final_requester.sendmage(/user_code/node_modules/@google cloud/kms/node_modules/protobufjs/src/Type.js:538:25)处的Type.fromObject(/user_code/node_modules/@google cloud/kms/node_modules/grpc/src/protobuf_js 6_common.js:70:23)处在拦截呼叫时。_callNext(/user_code/node_modules/@google cloud/kms/node_modules/grpc/src/client_interceptors.js:418:43)在拦截呼叫时。_callNext(/user_code/node_modules/@google cloud/kms/node_modules/grpc/src/client_interceptors.js:460:8)(/user_code/node_modules/@google cloud/kms/node_modules/grpc/src/client_interceptors.js:424:12)在InterceptingCall.sendmages(/user_code/node_modules/@google cloud/kms/node_modules/grpc/src/client_interceptors.js:460:8)


编辑:当我尝试使用base64编码时,我在decryptWebhookSecret.then(/user\u code/index.js:119:21)上的isRequestValid(/user\u code/index.js:81:8)上的Object.Hmac(crypto.js:93:16)上得到“TypeError:Key必须是TypeError(native)上的缓冲区”.

节点客户端库要求将明文和密文作为缓冲区提交。这很简单——您只需执行
ciphertext:Buffer.from(contents)
在您上面的示例中。

问题是
密文
需要进行base64编码。

我不相信这种情况,他们实际上接受字符串。我编辑中的错误实际上来自下游步骤,而不是由原始问题中的代码引起的。原始错误确实是字符串编码不正确实际上,它必须是base64。
contents = encryptedWebhookSecret[0].toString();
console.log(typeof contents);
console.log(contents);
const formattedName = kmsClient.cryptoKeyPath(PROJECT, 'global', KEYRING, KEY);
const kmsDecryptRequest = { 
    name: formattedName,
    ciphertext: contents //encryptedWebhookSecret
};  
console.log("Decrypting webhook secret...");
return kmsClient.decrypt(kmsDecryptRequest);