Los hash SHA512 difieren en Android, PHP y JavaScript

Estoy usando el hash SHA512 para transferir algunos datos cifrados entre mi aplicación y su back-end. Sin embargo, estoy teniendo una situación extraña y no tengo idea de lo que podría estar causándola.

Entonces, tengo las siguientes configuraciones probadas:

Android 2x SHA512

Android 1x SHA512 -> CryptoJS 1x SHA512

PHP 2x SHA512

Entonces, cuando hago el primer hash de Android 2x, obtengo el mismo resultado que cuando hago 1x android -> 1x cryptojs. Sin embargo, cuando hago el PHP 2x, obtengo el mismo resultado que obtengo en el primer pase de Android, pero el segundo pase de cifrado del PHP es diferente.

En PHP, probé las funciones hash () y openssl_digest () con bytes sin procesar como salida.

PHP:

$firstpass = base64_encode(hash('sha512', $enteredPassword, true));
//$firstpass = base64_encode(hash('sha512', $enteredPassword, true));

//$secondpass = base64_encode(openssl_digest($firstpass, 'sha512', true));
$secondpass = base64_encode(hash('sha512', $firstpass, true));

Androide:

public static String encryptPassword(String password) {
    MessageDigest md = null;
    try {
        md = MessageDigest.getInstance("SHA-512");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    if (md != null) {
        md.update(password.getBytes());
        byte byteData[] = md.digest();
        String base64 = Base64.encodeToString(byteData, Base64.DEFAULT);

        return base64;
    }
    return password;
}

CryptoJS:

var password = cryptojs.SHA512(req.params.password);
var basepassword = password.toString(cryptojs.enc.Base64);

¿Por qué mi primer hash sería correcto y el segundo no y cómo podría solucionarlo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta