Base64_encode отличается между Java и PHP

Вот моя проблема:

У меня есть функция 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, поэтому вам нужна необработанная двоичная форма.