Я пытаюсь настроить безопасный ключ хеша в Java (Android).Это не дает тот же результат, что и на стороне php (который я использую в качестве ссылки, и он работает).
Я прошел через много похожих вопросов, но (только один, я пробовал, но неработа) никто не решил это ясно.Вот коды, которые я тестировал.
// php code
$secureHash = 'ABCD';
$secret = '123AE45F';
echo '<br> using pack--';
echo hash_hmac('sha256', $secureHash, pack('H*', $secret));
echo '<br> without using pack--';
echo hash_hmac('sha256', $secureHash, $secret, false);
результат с пакетом : f7a009f2c3e654fa48296917ab6372ecb7aa2a24c43fccb70af743f66b6dba55
результат без пакета : fc602f0f6faf2072be9c0b995ee3d603f61414c4beb027b678c90946db6903a2
// Java code
private String getHashCode(String message, String secretKey) {
Mac mac;
String result = null;
try {
byte[] byteKey = secretKey.getBytes(StandardCharsets.UTF_8);
final String hmacSHA256 = "HmacSHA256";
mac = Mac.getInstance(hmacSHA256);
SecretKeySpec keySpec = new SecretKeySpec(secretKey.getBytes(), hmacSHA256);
sha256HMAC.init(keySpec);
byte[] mac_data = sha256HMAC.doFinal(message.getBytes(StandardCharsets.UTF_8));
result = bytesToHex(mac_data);
System.out.println("getHashCode: result " + result);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return result;
}
В коде Java я получаю вывод как fc602f0f6faf2072be9c0b995ee3d603f61414c4beb027b678c90946db6903a2
так же, как код php без пакета.Как я могу получить тот же вывод, что и PHP, то есть, используя pack('H*', $secret)
в коде Java?