trong PHP tôi có chức năng sau:tại sao hash_hmac PHP ('sha256') cho kết quả khác nhau hơn so với java sha256_HMAC
base64_encode(hash_hmac('sha256', $data, $secret, false));
Tôi đang cố gắng để tạo ra một hàm trong Java mà sẽ cung cấp các kết quả tương tự cho các các thông số "dữ liệu" và "bí mật" giống nhau.
Tôi cố gắng để sử dụng chức năng này:
public static String base64sha256(String data, String secret) {
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
sha256_HMAC.init(secret_key);
byte[] res = sha256_HMAC.doFinal(data.getBytes());
return Base64.encodeToString(res, Base64.NO_WRAP);
}
Nhưng tôi nhận được kết quả khác nhau cho cùng một đầu vào
Cập nhật: Chức năng này hoạt động. Thưởng thức.
public static String base64sha256(String data, String secret) {
String hash = null;
try {
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256");
sha256_HMAC.init(secret_key);
byte[] res = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
hash = getHex(res);
hash = Base64.encodeToString(hash.getBytes("UTF-8"), Base64.NO_WRAP);
} catch (Exception e){}
return hash;
}
static final String HEXES = "abcdef";
public static String getHex(byte [] raw) {
if (raw == null) {
return null;
}
final StringBuilder hex = new StringBuilder(2 * raw.length);
for (final byte b : raw) {
hex.append(HEXES.charAt((b & 0xF0) >> 4))
.append(HEXES.charAt((b & 0x0F)));
}
return hex.toString();
}
mã hóa dữ liệu có thể? ANSI vs UTF-8 chẳng hạn? – gtgaxiola
tôi đã cố gắng sử dụng getBytes ("UTF-8") trên cả hai thông số và nó vẫn không phải là kết quả tương tự như các phiên bản PHP –
Xem Q & A http://stackoverflow.com/q/4680661/ nơi họ nói về 'String.getBytes() 'và http://stackoverflow.com/q/23066005/ những thứ này được tìm thấy trong phần" Related ". –