如果我们Logger.log(signature);
在调用 to 之后立即放置computeDigest()
,我们会得到:
[8, 30, -43, 124, -101, 114, -37, 10, 78, -13, -102, 51, 65, -24, -83, 81]
正如 javascript 中所表示的,摘要包括正整数和负整数,因此我们不能简单地将它们视为 ascii 字符。然而,MD5 算法应该为我们提供 0x00 到 0xFF (255) 范围内的 8 位值。那么,那些负值只是对高位的误解。把它当作一个标志位。为了更正,我们需要在任何负值上加上 256。
如何在 JavaScript 中将十进制转换为十六进制?给我们这个来检索十六进制字符:
hexString = yourNumber.toString(16);
综上所述,sign()
这是您的功能,也可作为 gist 使用:
function sign(message){
message = message || "thisisteststring";
var signature = Utilities.computeDigest(
Utilities.DigestAlgorithm.MD5,
message,
Utilities.Charset.US_ASCII);
Logger.log(signature);
var signatureStr = '';
for (i = 0; i < signature.length; i++) {
var byte = signature[i];
if (byte < 0)
byte += 256;
var byteStr = byte.toString(16);
// Ensure we have 2 chars in our byte, pad with 0
if (byteStr.length == 1) byteStr = '0'+byteStr;
signatureStr += byteStr;
}
Logger.log(signatureStr);
return signatureStr;
}
以下是日志包含的内容:
[13-04-25 21:46:55:787 EDT] [8, 30, -43, 124, -101, 114, -37, 10, 78, -13, -102, 51, 65, -24, -83, 81]
[13-04-25 21:46:55:788 EDT] 081ed57c9b72db0a4ef39a3341e8ad51
让我们看看我们从这个在线 MD5 哈希生成器中得到了什么:
我尝试了其他一些字符串,它们始终与在线生成器的结果相匹配。