Хеш Java и JavaScript с результатом разницы SHA-256

Я делаю хеширование из Java и сравниваю с кодом Java Script, используя тот же SHA-256, но результат кажется другим. Кто-нибудь знает, помогите мне с этим, пожалуйста. Вот код ниже.

Код Java

private static final char[] hexArray = "0123456789ABCDEF".toCharArray();
private static String salt = "Apple@987";
private static byte[] saltArr = salt.getBytes();

public static String getSHA256(String data) {
    StringBuilder sb = new StringBuilder();
    try {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        md.update(saltArr);
        byte[] byteData = md.digest(data.getBytes());
        sb.append(bytesToHex(byteData));
    } catch(Exception e) {
        e.printStackTrace();
    }
    return sb.toString();
}

private static String bytesToHex(byte[] bytes) {
    char[] hexChars = new char[bytes.length * 2];
    for ( int j = 0; j < bytes.length; j++ ) {
        int v = bytes[j] & 0xFF;
        hexChars[j * 2] = hexArray[v >>> 4];
        hexChars[j * 2 + 1] = hexArray[v & 0x0F];
    }
    return String.valueOf(hexChars);
}

String hashed = getSHA256("SampleData");
System.out.println("hashed");

Код сценария Java (в почтальоне)

var salt = 'Apple@987';
var data = 'SampleData';
var hash = CryptoJS.HmacSHA256(data, salt).toString(CryptoJS.enc.Hex);

Результат Java:

7B2BBE6DAD962170A83A911EE7B84A382DE2F7FA0DA77C55F99F696EEFAF6C5D

Результат Java Script:

1de0de12c5f22bf98f2dbae8430470cac64875a28a035191c3f783e6a2d6cb3b

person Khong Minh    schedule 09.06.2020    source источник
comment
Вы используете разные алгоритмы хеширования: SHA256 с Java и HMAC SHA256 с JavaScript (см. security.stackexchange.com/questions/79577/ для различий). Вы также должны использовать CryptoJS.SHA256 с JavaScript.   -  person Thomas Kläger    schedule 09.06.2020
comment
В дополнение к проблеме SHA-256 / HMAC-SHA-256 вы не указываете кодировку. Если вы хешируете больше простых символов ASCII, это тоже имеет значение. Поэтому для хеширования всегда указывайте кодировку при преобразовании String в byte []! Обычно для этого подходят UTF-8 или UTF-16.   -  person Robert    schedule 09.06.2020
comment
Хорошо, большое спасибо за ваш ответ, позвольте мне попробовать перейти на sha-256 без HMAC   -  person Khong Minh    schedule 09.06.2020


Ответы (1)


результат Javascript (1de0de12c5f22bf98f2dbae8430470cac64875a28a035191c3f783e6a2d6cb3b) правильный, проверьте его на этой

Код Java, вы можете сослаться на эту ссылку

String key = "Apple@987";
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
sha256_HMAC.init(new SecretKeySpec(key.getBytes(), "HmacSHA256"));
byte[] result = sha256_HMAC.doFinal("SampleData".getBytes());
System.out.println (DatatypeConverter.printHexBinary(result));

код javascript:

var result = crypto.createHmac('SHA256', 'Apple@987').update('SampleData').digest('hex')
console.log(result)

Благодарю.

person Jing Jiang    schedule 09.06.2020
comment
Хорошо, большое спасибо за ваш ответ. Дай мне попробовать - person Khong Minh; 09.06.2020