2011-05-13 47 views
0

好吧,我有点困惑。我试图使用MessageDigest将我的密码存储在数据库中作为MD5哈希值,然后在用户尝试登录时抽出哈希以检查用户的密码。我是否需要将MessageDigest对象从寄存器传递给登录?

因此,当用户注册时,在注册时。 jsp的,我用这个代码来自己的密码(字符串被称为“密码”中的代码)转换为一个哈希(称为“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对象吗?

回答

0

但是,这并不工作,我想这是因为新的MessageDigest对象被创建(MessageDigest.getInstance(“MD5”);)等算法的工作方式不同。

这是不正确的。


我需要确保同样的MessageDigest对象上的login.jsp作为register.jsp使用?


你的问题是由别的东西造成的。可能你没有在数据库中保存初始密码的哈希值,或者你没有与输入的密码的哈希值进行比较,或者你正在比较在使用不同默认字符集的系统上的哈希值(在getBytes()上)。在做出结论之前检查实际的散列值。

+0

是的,我很抱歉,你是对的。我的代码中有一个错误。 – user752894 2011-05-13 19:37:39

相关问题