簡體   English   中英

SHA-256哈希返回不同的結果

[英]SHA-256 hash return different results

我們需要使用SHA-256對字符串進行哈希處理。

這是我的代碼:

public String getSHA256HashedString(String clearString) {
    String _LOC = "[SB_UtilityBean: getSHA256HashedString]";

    try {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        md.update(clearString.getBytes());

        String _encrypted = bytesToHex(md.digest());
        System.out.println(_LOC + "1.0 " + " Result 1: " + _encrypted);
        System.out.println(_LOC + "1.0 " + " Result 2: " + bytesToHex(md.digest()));

        return _encrypted;
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
}

private static String bytesToHex(byte[] bytes) {
    String _LOC = "[SB_UtilityBean: bytesToHex]";

    StringBuffer result = new StringBuffer();
    for (byte byt : bytes) result.append(Integer.toString((byt & 0xff) + 0x100, 16).substring(1));

    return result.toString();
}

如果將bytesToHex(md.digest())分配給_encrypted變量並執行_encrypted打印行, _encrypted得到結果1:

9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

如果我執行bytesToHex(md.digest())的打印行, bytesToHex(md.digest())得到結果2:

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

這是預期的。 文件說(強調我的):

public byte[] digest()

通過執行諸如填充之類的最終操作來完成哈希計算。 進行此調用后,摘要將重置。

因此,您對digest()第二次調用將獲得無字節的哈希,而不是輸入字符串的哈希。 您必須再次輸入字符串,或使用存儲的結果。

暫無
暫無

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

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