Этот php-код декодирует секретный ключ перед хэшированием с помощью SHA 512.
$API_SECRET_KEY="W0+m0Dc9GMN9yDVeq3GMDsJ49WasEhQHkNHNuDw3wNg=";
$BDAPI_SECRET_KEY=base64_decode($API_SECRET_KEY);
$HMAC_SIGN = base64_encode(hash_hmac('sha512',$MESSAGE,$BDAPI_SECRET_KEY,true));
echo $HMAC_SIGN;
BfVNi21gY09c8M18cWBRBgo1W9pAlXM99ZVoF7Kz2ETFnIuvXjj8NRvRgn/GaT/m6YJ8efsr5s9EDbIhznAaag==
Я хочу повторить это в скрипте приложения Google
var Secret = "W0+m0Dc9GMN9yDVeq3GMDsJ49WasEhQHkNHNuDw3wNg="var BDSecret= Utilities.base64Decode(Secret)
var hmac = Utilities.base64Encode(Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, message, BDSecret ));
Logger.log(hmac)
ew5KhLWSJixn8zw4s6VkpYIwvGBjrmjY3LhNWZr9CVEw6W22LOGg+lVzA3uQgOVyICSCffw2bzTepnBdoYtldw==
Если я не декодирую API перед хэшированием, они возвращают тот же результат. Но для этой конкретной цели ключ должен быть декодирован. Переменная message — это просто мое имя «Parit» на случай, если кто-то захочет скопировать.
я думал так Utilities.computeHmacSignature()
может быть невозможно использовать [] байт для значения. В качестве обходного пути, как насчет использования jsSHA? Я думаю, что в вашем случае вы можете использовать https://github.com/Caligatio/jsSHA/blob/master/src/sha512.js.
Процесс использования jsSHA заключается в следующем.
sha512.js
,
Code.gs
редактора сценариев.myFunction()
образца сценария.function myFunction() {
var message = "Parit";
var secret = "W0+m0Dc9GMN9yDVeq3GMDsJ49WasEhQHkNHNuDw3wNg=";
var obj = new jsSHA("SHA-512", "TEXT");
obj.setHMACKey(secret, "B64");
obj.update(message);
Logger.log(obj.getHMAC("B64"))
}
Parit
за message
, Я получил BfVNi21gY09c8M18cWBRBgo1W9pAlXM99ZVoF7Kz2ETFnIuvXjj8NRvRgn/GaT/m6YJ8efsr5s9EDbIhznAaag==
,Это вам не пригодилось, извините.
По обновлению Google от 19 июня 2018 года, Utilities.computeHmacSignature()
должен быть в состоянии использовать байтовые массивы. Таким образом, используя только собственный скрипт Google Apps Scvript, можно получить результат без использования jsSHA. Поэтому я хотел бы обновить свой ответ.
function myFunction() {
var message = "Parit";
var secret = "W0+m0Dc9GMN9yDVeq3GMDsJ49WasEhQHkNHNuDw3wNg=";
var value = Utilities.base64Decode(Utilities.base64Encode(message));
var key = Utilities.base64Decode(secret);
var out = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, value, key);
var res = Utilities.base64Encode(out)
Logger.log(res)
}
BfVNi21gY09c8M18cWBRBgo1W9pAlXM99ZVoF7Kz2ETFnIuvXjj8NRvRgn/GaT/m6YJ8efsr5s9EDbIhznAaag==
Других решений пока нет …