Logger.log(signature);
の呼び出しの直後に置くと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で10進数を16進数に変換するには? 16進文字を取得するためにこれを提供します:
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 Hash Generatorから得られるものを見てみましょう:
他のいくつかの文字列で試してみたところ、オンライン ジェネレーターの結果と一貫して一致していました。