打印Java String返回int数组

时间:2014-03-05 14:13:04

标签: java hash

我使用下面的函数来计算密码的哈希值。我的问题是当我尝试打印哈希码时,我得到一个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;
}

3 个答案:

答案 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数组包含在字符串中,这样就可以正常....