代码:
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);
encryptedWebhookSecret是使用@ google-cloud / storage客户端进行download()操作的结果。这将返回一个[Buffer],我将其强制转换为字符串。我记录了加密的字符串,它的值是正确的。我可以从命令行使用gsutil
下载加密的机密,并且gcloud kms decrypt
可以正常工作。
此错误似乎表明字符串未正确编码(应该不是utf8吗?)。
PROJECT,KEYRING和KEY的值已经过两次和三次检查,并且是正确的。
错误:
ERROR: Error: invalid encoding at Error (native) at Object.decode (/user_code/node_modules/@google-cloud/kms/node_modules/@protobufjs/base64/index.js:105:19) at Type.DecryptRequest$fromObject [as fromObject] (eval at Codegen (/user_code/node_modules/@google-cloud/kms/node_modules/@protobufjs/codegen/index.js:50:33), <anonymous>:12:15) at Type.fromObject (/user_code/node_modules/@google-cloud/kms/node_modules/protobufjs/src/type.js:538:25) at serialize (/user_code/node_modules/@google-cloud/kms/node_modules/grpc/src/protobuf_js_6_common.js:70:23) at Object.final_requester.sendMessage (/user_code/node_modules/@google-cloud/kms/node_modules/grpc/src/client_interceptors.js:802:37) at InterceptingCall._callNext (/user_code/node_modules/@google-cloud/kms/node_modules/grpc/src/client_interceptors.js:418:43) at InterceptingCall.sendMessage (/user_code/node_modules/@google-cloud/kms/node_modules/grpc/src/client_interceptors.js:460:8) at InterceptingCall._callNext (/user_code/node_modules/@google-cloud/kms/node_modules/grpc/src/client_interceptors.js:424:12) at InterceptingCall.sendMessage (/user_code/node_modules/@google-cloud/kms/node_modules/grpc/src/client_interceptors.js:460:8)
编辑:当我尝试使用base64编码时,出现“ TypeError:键必须是Object处新Hmac(crypto.js:93:16)处TypeError(native)处的缓冲区。的Hmac(crypto.js:91:12)位于isRequestValid(/user_code/index.js:81:8),位于解密WebhookSecret.then(/user_code/index.js:119:21)。
答案 0 :(得分:1)
Node客户端库要求将纯文本和密文作为缓冲区提交。这很容易-您只需在上面的示例中执行ciphertext: Buffer.from(contents)
。
答案 1 :(得分:1)
问题是ciphertext
需要使用base64编码。