![](/img/trans.png)
[英]I am trying to replaceEvens with a “0” in java, what am I doing wrong?
[英]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.