Java и javascript генерирует различный вывод для Base64 Hma c SHA256 - PullRequest
2 голосов
/ 13 февраля 2020

Когда я пытался создать аналогичную функцию в Java и javascript, которая выводит строку Base64 шифрования Hma c SHA 256, вывод не совпадает.

Javascript

var dataToSign = "message";
var secret = "secret";
function generateAuthHeader(dataToSign){
    var hash = CryptoJS.HmacSHA256(dataToSign,secret);
    return hash.toString(CryptoJS.enc.Base64); 

какие выходы

+eZuF5tnR65UEI+C+K3os8Jddv0wr95sOVgixTAZYWk=

Java

String key="secret"; 
String dataToSign = "message"; 
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
sha256_HMAC.init(secret_key);
System.out.println(Base64.getEncoder().encodeToString(sha256_HMAC.doFinal(dataToSign.getBytes("UTF-8"))));

какие выходы

i19IcCmVwVmMVz2x4hhmqbgl1KeU0WnXBgoDYFeWNgs=

есть ли ошибки в моем коде?

1 Ответ

0 голосов
/ 13 февраля 2020

Какое значение hash в версии JavaScript и какое значение sha256_HMAC.doFinal(dataToSign.getBytes("UTF-8")) в Java версии?

Кроме того, не могли бы вы попробовать получить Base64 repr в JavaScript:

CryptoJS.enc.Base64.stringify(hash);

вместо hash.toString?

Кроме того, UTF-8 не должен иметь значения в версии Java, но я бы попытался удалить их и просто делай getBytes() везде.

...