【发布时间】:2017-07-11 06:40:05
【问题描述】:
鉴于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;
},'');
}
但是,假设签名稍有改变,这样秘密是一个 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 脚本中复制这种行为!
【问题讨论】:
标签: javascript node.js google-apps-script base64 hmac