0

好吧,我有点困惑。我正在尝试使用 MessageDigest 将我的密码作为 MD5 哈希存储在数据库中,然后在用户尝试登录时提取哈希以检查用户的密码。

因此,当用户在 register.jsp 中注册时,我使用此代码将他们的密码(该字符串在代码中称为“password”)转换为哈希(称为“hashtext”):

MessageDigest m = MessageDigest.getInstance("MD5");
m.reset();
m.update(password.getBytes());
byte[] digest = m.digest();
BigInteger bigInt = new BigInteger(1,digest);
String hashtext = bigInt.toString(16);

while(hashtext.length() < 32 ){
  hashtext = "0"+hashtext;
}

然后,我需要管理如何检查用户尝试登录时输入的密码。我有另一个页面:login.jsp,我在其中对输入的密码运行与上面完全相同的代码,并根据我从数据库中提取的哈希检查结果。

但是,这不起作用,我认为这是因为创建了一个新的 MessageDigest 对象 (MessageDigest.getInstance("MD5");),因此算法的工作方式不同。

我是否需要确保在 login.jsp 上使用与 register.jsp 相同的 MessageDigest 对象?

4

1 回答 1

0

但是,这不起作用,我认为这是因为创建了一个新的 MessageDigest 对象 (MessageDigest.getInstance("MD5");),因此算法的工作方式不同。

这不是真的。


我是否需要确保在 login.jsp 上使用与 register.jsp 相同的 MessageDigest 对象?

不。


您的问题是由其他原因引起的。可能您没有将初始密码的哈希值保存在数据库中,或者您没有与输入密码的哈希值进行比较,或者您正在比较使用不同默认字符集的系统上的哈希值getBytes()。在得出结论之前检查实际的哈希值。

于 2011-05-13T19:28:54.267 回答