Base64_encode diferente entre Java y PHP

Aquí está mi problema:

Tengo una función JAVA para generar una cadena encriptada. Tengo que hacer lo mismo en PHP.

Mi función de 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; } 

Mi función de PHP:

 function generateSignature() { $sequence = "hello"; $encrypted = hash_hmac('sha256', $sequence, "SECRET_KEY"); return base64_encode($encrypted); } 

El valor de retorno de las dos funciones no es el mismo. Lo que noté es que antes de la encoding en la base 64, ambas funciones tienen el mismo resultado. Entonces, para mí, el problema no está en la generación de la clave sino en la encoding.

¿Alguien capaz de ayudar por favor?

La respuesta está en la documentación de la función PHP hash_hmac.

Cuando se establece en TRUE, genera datos binarios en bruto. FALSE genera hexits en minúsculas.

Pase “verdadero” como argumento final. Los hashes son binarios. Al convertirlos en cadenas, a menudo se codifican en hexadecimal. Pero en este caso vas a codificar en base-64, por lo que quieres la forma binaria en bruto.