您好,我正在尝试为需要对数据进行 SHA512 加密的 Api 创建 Http 请求。我在 C# 中做了同样的例子。在 Android Java 中,我无法复制哈希并验证 WebApi。我认为问题在于
mac.doFinal(byteData);
正在创建具有负值的字节数组。在 C# 中没有任何负面影响。这是我的代码。请告诉我我做错了什么:
public static String calculateHMAC(String secret, String data) {
byte[] byteSecret = secret.getBytes(StandardCharsets.UTF_8);
byte[] byteData = data.getBytes(StandardCharsets.UTF_8);
try {
SecretKeySpec signingKey = new SecretKeySpec(byteSecret, "HmacSHA512");
Mac mac = Mac.getInstance("HmacSHA512");
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(byteData); // -> Here Java makes rawMac with negative bytes
return byteArrayToString(rawHmac);
} catch (GeneralSecurityException e) {
throw new IllegalArgumentException();
}
}
private static String byteArrayToString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for(byte b : bytes){
sb.append(Integer.toHexString(0xff & b));
}
return sb.toString();
}
提前致谢
Helenr
相关分类