我从Java进行哈希处理,并使用相同的SHA-256与Java脚本代码进行比较,但结果似乎有所不同。有人知道吗请帮我。这是下面的代码。
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脚本结果:
1de0de12c5f22bf98f2dbae8430470cac64875a28a035191c3f783e6a2d6cb3b
Javascript结果(1de0de12c5f22bf98f2dbae8430470cac64875a28a035191c3f783e6a2d6cb3b)是正确的,请在此link中进行检查
Java代码,您可以参考此link
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)
谢谢。