Если мы помещаем 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 к любому отрицательному значению.
How to convert decimal to hex in JavaScript? дает нам это для получения шестнадцатеричных символов:
hexString = yourNumber.toString(16);
Полагая, что вместе, вот ваша sign()
функция, которая также available as a 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
Давайте посмотрим что мы получаем от this on-line MD5 Hash Generator:
![081ed57c9b72db0a4ef39a3341e8ad51](https://i.stack.imgur.com/qHxTq.png)
Я попробовал его с несколькими другими строками, и они последовательно соответствуют результат от генератора на линии.
вам нужно добавлять, что вы пробовали. – Woot4Moo