Вот моя проблема:
У меня есть функция JAVA для генерации зашифрованной строки. Я должен сделать то же самое в PHP.
Моя функция Java:
String generateSignature () { byte[] Sequence = ("hello").getBytes("UTF-8"); Mac HMAC = Mac.getInstance("HMACSHA256"); HMAC.init("SECRET_KEY"); byte[] Hash = HMAC.doFinal(Sequence); String Signature = new String(Base64.encodeBase64(Hash)); return Signature; }
Моя функция PHP:
function generateSignature() { $sequence = "hello"; $encrypted = hash_hmac('sha256', $sequence, "SECRET_KEY"); return base64_encode($encrypted); }
Возвращаемое значение двух функций не совпадает. Я заметил, что перед кодированием на базу 64 обе функции имеют одинаковый результат. Итак, для меня проблема заключается не в генерации ключа, а в кодировке.
Кто-нибудь может помочь?
Ответ в документации для функции PHP hash_hmac.
Когда установлено значение TRUE, выводит необработанные двоичные данные. FALSE выводит нижний регистр.
Передайте «true» в качестве последнего аргумента. Хэши двоичные. Когда они превращаются в строки, они часто кодируются в шестнадцатеричном виде. Но в этом случае вы собираетесь кодировать его на base-64, поэтому вам нужна необработанная двоичная форма.