如果我们把Logger.log(signature);
致电后立即computeDigest()
,我们得到:
[8, 30, -43, 124, -101, 114, -37, 10, 78, -13, -102, 51, 65, -24, -83, 81]
正如javascript中所表示的,摘要包括正整数和负整数,因此我们不能简单地将它们视为ascii字符。然而,MD5 算法应该为我们提供 8 位值,范围在 0x00 到 0xFF (255) 之间。那么,这些负值只是对高位的误解;将其视为一个符号位。为了更正,我们需要将任何负值加上 256。
如何在 JavaScript 中将十进制转换为十六进制? https://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript为我们提供了检索十六进制字符的方法:
hexString = yourNumber.toString(16);
把它们放在一起,这就是你的sign()
函数,这也是可作为要点 https://gist.github.com/mogsdad/5464686:
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 哈希生成器 http://www.miraclesalad.com/webtools/md5.php:
我用其他一些字符串进行了尝试,它们始终与在线生成器的结果相匹配。