Google-App-Script против php в кодировке base64

Этот 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» на случай, если кто-то захочет скопировать.

0

Решение

я думал так Utilities.computeHmacSignature() может быть невозможно использовать [] байт для значения. В качестве обходного пути, как насчет использования jsSHA? Я думаю, что в вашем случае вы можете использовать https://github.com/Caligatio/jsSHA/blob/master/src/sha512.js.

Процесс использования jsSHA заключается в следующем.

Поток :

  1. Загрузите sha512.js.
  2. В редакторе сценариев создайте новый сценарий, например, имя файла sha512.js,
    • Скопируйте и вставьте скрипт sha512.js в созданный скрипт.
  3. Скопируйте и вставьте образец сценария в Code.gs редактора сценариев.
  4. Бежать 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==
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector