gpt4 book ai didi

javascript - Google Apps 脚本中的 Hmac 签名,当 Secret 和 Digest 是 base64 编码时

转载 作者:行者123 更新时间:2023-11-30 15:11:42 29 4
gpt4 key购买 nike

在 nodejs 中给出这段代码:

const crypto = require('crypto');
const message = 'message to sign';
const secret = 'mysecret';
const signature = crypto.createHmac('sha256', secret).update(message).digest('hex');
console.log(signature);

输出是40d4c57eed56968de0f3a22e73ebf8abc6ab4c38bba95fd2c85dd4dc90bf36b9

借助答案here ,我在 Google Apps 脚本中完全复制了这种行为,具有以下功能:

//conversion from byte array taken from: https://stackoverflow.com/a/27933459
function makeHmacSignature(macAlg, message, secret) {
return Utilities.computeHmacSignature(macAlg, message, secret).reduce(function(str,chr){
chr = (chr < 0 ? chr + 256 : chr).toString(16);
return str + (chr.length==1?'0':'') + chr;
},'');
}

但是,假设签名略有更改,例如 secret 是 base64 编码的字符串,我们期望 base64 中的摘要。在 nodejs 代码中,更改是微不足道的:

const crypto = require('crypto');
const message = 'message to sign';
const secret = 'mysecret';
const decodedSecret = Buffer(secret, 'base64');
const signature = crypto.createHmac('sha256', decodedSecret).update(message).digest('base64');
console.log(signature);

给出输出 bBLhyGY61BPEbPiFKknX1g9eXv9r98uvwwgVy7YMYDY=

我已经尝试了几个小时,但我无法弄清楚如何在 Google Apps 脚本中复制此行为!

最佳答案

Google Apps Script 实际上有一个实用功能。

参见:https://developers.google.com/apps-script/reference/utilities/utilities#computehmacsha256signaturevalue-key

所以代替

const signature = crypto.createHmac('sha256', secret).update(message).digest('hex');

你可以这样做:

var byteSignature = Utilities.computeHmacSha256Signature(message, secret);
// convert byte array to hex string
var signature = byteSignature.reduce(function(str,chr){
chr = (chr < 0 ? chr + 256 : chr).toString(16);
return str + (chr.length==1?'0':'') + chr;
},'');

关于javascript - Google Apps 脚本中的 Hmac 签名,当 Secret 和 Digest 是 base64 编码时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45027112/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com