Можете ли вы объяснить мне разницу между созданием сигнатуры HmacSha512 с использованием Crypto-модуля Node.JS и скрипта Google Apps?HMAC в Node.js crypto vs. Google Apps Script (GAS)
Код 1 - Node.js
var secret = "my secret";
var message = "message";
var crypto = require("crypto");
var hmac = new crypto.createHmac("sha512", secret);
var signature = hmac.update(message).digest("base64");
console.log(signature);
код 1 - Google Apps Script
var secret = "my secret";
var message = "message";
var signature = Utilities.base64Encode(Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, message, secret));
Logger.log(signature);
Оба кодов генерируют идентичные подписи:
g4fZkM2XGNjhti9Wah3TU2/rvmxbL3nk4F3ZLljpED23oQ7Y7dtVmVKprQKuzyt0B4Spo214isWCvnoXXVTS8g==
Но проблема возникает, когда мы имеют секрет в виде ключа с кодировкой base64. Итак, первый шаг, который мы должны сделать, это подготовить секрет. Давайте изменим код:
код 2 - Node.js
var key = "JOLDQW5wVIdwvHbhSDCktxhfwpgtxlAH+DG5EPoeDT8aPGSDYYh5U6QjbASUhvztjGPgA/Ue2x8QKwUklX7+Xw==";
var secret = new Buffer(key, "base64");
var message = "message";
var crypto = require("crypto");
var hmac = new crypto.createHmac("sha512", secret);
var signature = hmac.update(message).digest("base64");
console.log(signature);
Результат:
GELSKf33zit7nIfjj8XH3wZIga/CSYuCU5oTGysqOg6C/wFggunw59wzc7Mr95XW/gZ8putB67AADqnP0gLdiw==
Code 2 - Google Apps Script
var key = "JOLDQW5wVIdwvHbhSDCktxhfwpgtxlAH+DG5EPoeDT8aPGSDYYh5U6QjbASUhvztjGPgA/Ue2x8QKwUklX7+Xw==";
var message = "message";
var secret = Utilities.base64Decode(key);
var signature = Utilities.base64Encode(Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, message, secret));
Logger.log(signature);
Результат:
l11xAQ5C5ARx/r/pbNYpMKCqWOwIaxFTkfS9OXCwfUxv33y3gU/sL2vHueOxpkCKmF+lxIcFMYblwrvfWaTZkg==
Разница, вероятно, заключается в обработке/декодировании ключа (Buffer vs. Utilities.base64Decode. Версия Node.js является правильной (она проверяется на стороне сервера).
Как правильно декодировать и использовать ключ с помощью скрипта Google Apps?
Thnk you @Spencer для вашего предложения.Я пытался модифицировать код: 'var key =" JOLDQW5wVIdwvHbhSDCktxhfwpgtxlAH + DG5EPoeDT8aPGSDYYh5U6QjbASUhvztjGPgA/Ue2x8QKwUklX7 + Xw == "; var message = "message"; var secret = Utilities.newBlob (Utilities.base64Decode (ключ)). GetDataAsString(); var signature = Utilities.base64Encode (Utilities.computeHmacSignature (Utilities.MacAlgorithm.HMAC_SHA_512, сообщение, секрет)); Logger.log (подпись); ' И результат: ' rbW61ipkR57jJOvFIhfeiAhBH/5cH9W2l/RtRGLCvFUeyl2iEN + yNnrubWjK4EcGyQkFbKpjhtCLgot/fV5LaQ == ' Таким образом, все больше и больше, кроме Node.js генерирует ... –