簡體   English   中英

嘗試將字符串轉換為MD5時我做錯了什么

[英]What am I doing wrong when trying to convert string to MD5

我正在使用一個登錄框架,該框架檢查用戶輸入密碼與SQL數據庫中的密碼。 我使用以下命令將文本轉換為MD5以存儲在數據庫中

HASHBYTES('MD5', 'JavaTest')產生5E58D71FBD6D17577AAAB8711264A813。

然后在Java中,我使用以下代碼嘗試將相同的密碼“ JavaTest”轉換為MD5進行比較。

MessageDigest m = MessageDigest.getInstance("MD5");
            m.update(password.getBytes());
            byte[] digest = m.digest();
            BigInteger bigInt = new BigInteger(1, digest);
            hashText = bigInt.toString();

但這會產生字符串150157350912923000195076232128194914284

我究竟做錯了什么?

編輯:我不認為這是重復的,因為我已經研究了答案,並且已經使我走了這么遠,但是我無法弄清楚我在做什么錯。

只需將radix參數傳遞給bigInt.toString 如果您需要十六進制表示,則將16作為基數傳遞,如下所示:

hashText = bigInt.toString(16);

公共字符串toString(int radix)

以給定的基數返回此BigInteger的String表示形式。 如果基數在從Character.MIN_RADIX到Character.MAX_RADIX(包括)的范圍之外,它將默認為10(對於Integer.toString就是這種情況)。 使用Character.forDigit提供的數字到字符的映射,並在適當時添加減號。 (此表示形式與(String,int)構造函數兼容。)

參數:

radix-字符串表示形式的基數。 返回:以給定的基數表示此BigInteger的字符串表示形式。

同樣,您可以在不使用BigInteger的情況下構建十六進制字符串形式的摘要字節數組:

public static String bytesToHex(byte[] bytes) {
    StringBuilder builder = new StringBuilder();
    for(byte b : bytes) {
        builder.append(String.format("%02x", b));
    }
    return builder.toString();
}

暫無
暫無

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

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