[英]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.