Я пытаюсь передать PHP-пример интеграции API в Javascript / JQuery. В PHP зашифрованная строка создается с использованием следующего кода:
$sig = base64_encode(hash_hmac('sha256', $sign, $this->secretAccessKey, true)
функции которого описаны здесь:
http://php.net/manual/en/function.hash-hmac.php
http://us.php.net/base64_encode
В Javascript я использую криптографию JQuery для создания части HMAC:
http://code.google.com/p/crypto-js/#HMAC-SHA256
и я пытаюсь выяснить, нужен ли мне также код base64, поскольку он уже находится в base64. Это код, который я сейчас запускаю:
var sigHash = Crypto.HMAC(Crypto.SHA256, sign, accessKey);
Это верно? Как я могу создать эквивалент javascript / jquery указанной выше функции PHP?
HMAC является стандартом. Так же SHA-256. Поэтому их результаты, независимо от реализации, должны быть одинаковыми.
В кодировке Base64 могут быть только различия. Обычно не буквенно-цифровые символы +
и /
, но вы не можете рассчитывать на это. Я проверил, и обе реализации используют одни и те же символы без алфавитно-цифрового кода.
Однако вы должны «вручную» проверить несколько тысяч строк. Реализация в PHP хорошо протестирована. Но я не знаю, верно ли то же самое для реализации в jQuery …
Синтаксис для кодированного вывода Base64:
Crypto.util.bytesToBase64( Crypto.HMAC(Crypto.SHA256, sign, accessKey, { asBytes: true }) );
Если вам когда-либо понадобится вдохновение для реализации функции JS функции PHP, посмотрите на PHPJS.org. Эквивалент JavaScript для base64_encode
можно найти по адресу: base64_encode .