私はこのコードを使用してパスワードを暗号化および復号化します
public class SecureDigester
{
private static final char digits[] =
{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
'F' };
private static String byteArrayToHexString(byte[] b)
{
StringBuffer hexString = new StringBuffer(b.length);
for (int i = 0; i < b.length; i++)
{
hexString.append(digits[(b[i] & 0xF0) >> 4]);
hexString.append(digits[b[i] & 0x0F]);
}
return hexString.toString();
}
public static String digest(String plaintext)
{
try
{
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(plaintext.getBytes("UTF-8"));
byte[] mdBytes = md.digest();
String hashString = byteArrayToHexString(mdBytes);
return hashString;
} catch (Exception e)
{
throw new RuntimeException(e);
}
}
}
私のログインでは、このコードを使用してパスワードを復号化しています。
String passwordDigest = SecureDigester.digest(password);
if (!user.getPassword().equals(passwordDigest))
{
// authentication failed: bad password
}
これで、ユーザーのユーザー名とパスワードを指定した電子メールに送信するforgot-password.jspページができました。しかし、以下のコードを使用すると、データベース内の暗号化されたパスワードとは異なる暗号化されたパスワードを受け取りました。
String Email = req.getParameter("email");
User userItem = new UserDAO().findEmail(Email);
SendMailSSL sendEmail = new SendMailSSL();
String password = userItem.getPassword();
String EPassword = SecureDigester.digest(password);
sendEmail.send(userItem.getUsername(), EPassword, userItem.getEmail());
これを解決する方法は?