我尝试使用SHA512创建一个生成HMAC签名的Google脚本,以便对API进行身份验证。以下是我使用的代码:
var SystemTimeMilli = Date.now()
var InputString = ('Some Text' + '\n' + SystemTimeMilli);
var PrivateKey = 'bEDtDJnW0y/Ll4YZitxb+D5sTNnEpQKH67EJRCmQCqN9cvGiB8+IHzB7HjsOs3mSlxLmu4aiPDRpe9anuWzylw==' //sample private key
var signature = Utilities.base64Encode(Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, InputString, PrivateKey, Utilities.Charset.UTF_8));
Logger.log(signature);
这会为日志生成一个字符串,但与使用基于Web的哈希生成器的结果进行比较时,结果会有所不同。
但是,如果我使用
var InputString = ('Some Text' + SystemTimeMilli);
没有\n
我的Google脚本中生成的结果和基于Web的哈希生成器匹配。
因此,我假设Google Script处理新行的方式与网络基础生成器不同,但我无法弄清楚如何使它们匹配或哪一个是正确的结果。
修改
添加更多信息:
让我们说SystemTimeMilli = 1234567890123
当我使用我的脚本输入('Some Text' + SystemTimeMilli)
时
bEDtDJnW0y/Ll4YZitxb+D5sTNnEpQKH67EJRCmQCqN9cvGiB8+IHzB7HjsOs3mSlxLmu4aiPDRpe9anuWzylw==
作为PrivateKey
我明白了
oDVJk38b634G9Ykdqm+hVmSb5C8h6/re5/XG+MjyddTKygWcoZjWu0DfNGY/JWu5Be41zLDKfEZnuFcACrvs7w==
已退回。
如果我使用SHA-512(SHA2)作为算法和Base64编码作为输出格式将/account/balance1234567890123
输入https://quickhash.com,则相同。
但是,如果我在脚本中输入('Some Text' + '\n' + SystemTimeMilli)
,则会返回3sj1jbx1tQ4nc8XOkk3nW8TvG5zvCam2LN51fQWDXOKU5O/1KBAdzdp+YV+aAdYHWCY2x3jqCfbXKoOmfoD0KA==
但是使用
/account/balance
1234567890123
返回不同的东西。我已经尝试了很多不同的组合,但我从来没有得到与我的脚本相同的结果。
我无法让我的脚本对API进行身份验证,所以我真的想确定我是否能够开始使用正确的HMAC。