我使用下面的函数来计算密码的哈希值。我的问题是当我尝试打印哈希码时,我得到一个int数组,即使哈希变量是String类型。
private static String getHashCode(String password) {
String hash = "";
try {
MessageDigest md5 = MessageDigest.getInstance("SHA-512");
byte [] digest = md5.digest(password.getBytes("UTF-8"));
hash = Arrays.toString(digest);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
System.out.println(hash);
return hash;
}
答案 0 :(得分:1)
这很正常。你在打电话:
hash = Arrays.toString(digest);
所以你得到一个以字符串形式表示数组digest
的字符串。
答案 1 :(得分:1)
这是因为你调用了Arrays.toString
,它返回了数组的直接字符串表示。
相反,您可能需要byte[]
数组的十六进制表示,您可以使用此类(未经测试)执行此操作:
StringBuilder hexString = new StringBuilder();
for (int i = 0; i < digest.length; i++) {
String hex = Integer.toHexString(0xFF & digest[i]);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
String hash = hexString.toString();
答案 2 :(得分:1)
正如您所见,byte []摘要是一个包含int值的字节数组,之后您将转换为字符串,因此将int数组包含在字符串中,这样就可以正常....