如何在登录时将原始密码与数据库中的加密密码条目匹配


MessageDigest alg = MessageDigest.getInstance("MD5");
alg.reset(); 
alg.update(password.getBytes());
byte[] digest = alg.digest();
StringBuffer hashedpasswd = new StringBuffer();
String hx;
for (int i=0;i<digest.length;i++){
hx =  Integer.toHexString(0xFF & digest[i]);
//0x03 is equal to 0x3, but we need 0x03 for our md5sum
if(hx.length() == 1){hx = "0" + hx;}
hashedpasswd.append(hx);
}

我按照上面的代码进行密码加密。但是,当登录时,密码会使用数据库密码进行检查,并且登录失败,因为数据库条目是加密的密码。如何在登录时用原始密码检查数据库的加密密码?

在检查数据库时,使用与在数据库中保存密码相同的算法对您输入的密码进行哈希处理。这就是哈希的工作原理。您不需要从数据库中"解密"密码,这是不可能的。您宁愿对输入的密码进行哈希处理,并检查两个哈希值(即db中的哈希值和刚刚哈希值(是否相等。这就是散列的整个概念。你不能"去哈希"某些东西。您只能对即将到来的数据进行哈希处理,并将其与先前的哈希值进行比较。

encrypt(user_entered_password( == getPasswordFromDatabase((

最新更新