【发布时间】:2019-01-05 21:44:17
【问题描述】:
您好,我正在尝试创建对 Api 的 Http 请求,该请求需要对数据进行 SHA512 加密。我在 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();
}
提前致谢
【问题讨论】:
标签: java android byte hmac sha