【发布时间】:2018-03-13 08:58:47
【问题描述】:
此 php 代码在使用 SHA 512 散列之前对密钥进行解码
$API_SECRET_KEY="W0+m0Dc9GMN9yDVeq3GMDsJ49WasEhQHkNHNuDw3wNg=";
$BDAPI_SECRET_KEY=base64_decode($API_SECRET_KEY);
$HMAC_SIGN = base64_encode(hash_hmac('sha512',$MESSAGE,$BDAPI_SECRET_KEY,true));
echo $HMAC_SIGN;
BfVNi21gY09c8M18cWBRBgo1W9pAlXM99ZVoF7Kz2ETFnIuvXjj8NRvRgn/GaT/m6YJ8efsr5s9EDbIhznAaag==
我想在谷歌应用脚本中复制这个
var Secret = "W0+m0Dc9GMN9yDVeq3GMDsJ49WasEhQHkNHNuDw3wNg="
var BDSecret= Utilities.base64Decode(Secret)
var hmac = Utilities.base64Encode(Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, message, BDSecret ));
Logger.log(hmac)
ew5KhLWSJixn8zw4s6VkpYIwvGBjrmjY3LhNWZr9CVEw6W22LOGg+lVzA3uQgOVyICSCffw2bzTepnBdoYtldw==
如果我在散列之前不解码 API,它们会返回相同的结果。但是为了这个特定的目的,需要对密钥进行解码。 message 变量只是我的名字“Parit”,以防有人想要复制。
【问题讨论】:
-
Base64解码后记录密钥时它们是否相同?会不会是 utf8/非 utf8 问题?
-
回显 $BDAPI_SECRET_KEY;返回相同的 Logger.log(Utilities.newBlob(BDSecret).getDataAsString());
-
你需要
Utilities.newBlob(BDSecret).getDataAsString()来获取BDSecret作为字符串吗?如果是这样,它不应该在computeHmacSignature参数中(根据文档,关键参数是一个字符串)吗?您可以尝试的另一件事是给computeHmacSignature提供第四个参数以尝试指定另一个字符集 -
你是对的,GAS 解码为源字节数组,而 php 解码为文本(ASCII)。问题是某些源八位字节是负数,不能转换为 ASCII 中的任何内容。
-
[91, 79, -90, -48, 55, 61, 24, -61, 125, -56, 53, 94, -85, 113, -116, 14, -62, 120、-11、102、-84、18、20、7、-112、-47、-51、-72、60、55、-64、-40]
标签: php google-apps-script base64 encode hmac