簡體   English   中英

用Java哈希MD5嗎?

[英]Hash with MD5 in Java?

我正在創建一個程序,該程序將獲取用戶的登錄名和密碼,並對該變量(登錄名和密碼)進行哈希處理。

當我對登錄名的輸出進行哈希處理時,它有效,但是當我嘗試對密碼的輸出進行哈希處理時,則無效。

代碼:

String login;
String password;


login = JOptionPane.showInputDialog("Login : ");
password = JOptionPane.showInputDialog("Password : ");

MessageDigest m; 


try 
{ 
m = MessageDigest.getInstance("MD5");
m.update(login.getBytes(),0,login.length()); 
m.update(password.getBytes(),0,password.length());
BigInteger login1 = new BigInteger(1, m.digest()); 
BigInteger password1 = new BigInteger(1, m.digest());

login = String.format("%1$032X", login1); 
password = String.format("%1$032X", password1); 

JOptionPane.showMessageDialog(null,"Login : " + login + 
                "\nPassword : " + password);

//System.out.println("login : "+ login); 
//System.out.println("password : " + password);
} 

輸出:

login : E9CA9D798BA364DFF16C738D03AF6668
password : D41D8CD98F00B204E9800998ECF8427E

變量登錄正常,但哈希時密碼總是得到相同的結果,我想使變量密碼在哈希時總是得到不同的結果。

PS:對不起,英語不好,不是我的母語。

正如評論中指出的那樣,您正在調用摘要兩次,而沒有重置。 您需要在重新使用摘要之前將其重置。

try
{
    m = MessageDigest.getInstance("MD5");
    m.update(login.getBytes(), 0, login.length());
    BigInteger login1 = new BigInteger(1, m.digest());
    login = String.format("%1$032X", login1);

    m.reset(); // <---- Reset before doing the password
    m.update(password.getBytes(), 0, password.length());
    BigInteger password1 = new BigInteger(1, m.digest());
    password = String.format("%1$032X", password1);

    System.out.println(login);
    System.out.println(password);
}

我猜想您是從Web元素中檢索密碼,而不是直接提取用於哈希的字符串。 D41D8CD98F00B204E9800998ECF8427E是“ nothing”(零長度字符流)的md5sum。 通常在html(html5)中,密碼字段足夠智能,不會泄露數據,這可能就是為什么您得到空字符串作為回報的原因。 希望這可以幫助

暫無
暫無

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

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