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

Cat*_*Cat 2 java database passwords md5 password-encryption

   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);
  }
Run Code Online (Sandbox Code Playgroud)

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

Roh*_*hah 5

在检查数据库时,使用与用于将其保存在数据库中的算法相同的算法来哈希输入的密码。这就是哈希的工作方式。您不需要从数据库“解密”密码,这是不可能的。您希望对输入的密码进行哈希处理,并检查两个哈希值(即db中的一个和刚刚哈希的一个)是否相等。这就是哈希的整个概念。您不能“ DeHash”某事。您只能散列即将到来的数据,并将其与先前散列的值进行比较。