簡體   English   中英

打印int的Java字符串返回數組

[英]Printing Java String return array of int

我使用下面的函數來計算密碼的哈希值。 我的問題是,當我嘗試打印哈希碼時,即使哈希變量的類型為String,我也會得到一個int數組。

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;
}

這很正常。 您正在致電:

hash = Arrays.toString(digest);

因此,您將獲得一個字符串,該字符串以字符串形式表示數組digest

那是因為您調用了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();

如您所見,byte []摘要是一個包含int值的字節數組,此后您將其轉換為字符串,因此將int數組置為string,這很正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM