MD5和Hibernate查询

时间:2011-01-10 15:21:52

标签: java hibernate passwords

public Login authenticate(Login login) {
         String query = "SELECT L FROM Login AS L WHERE L.email=? AND L.password=?";
         Object[] parameters = { login.getEmail(), login.getPassword() };
         List<Login> resultsList = (getHibernateTemplate().find(query,parameters));
         if (resultsList.isEmpty()) {
             //error dude
         }
         else if (resultsList.size() > 1) {
             //throw expections
         }
         else {
           Login login1 = (Login) resultsList.get(0);
           return login1;
         }       
       return null;  
    }

我将我的数据库表密码col设置为MD5,现在如何将其恢复到此处。

2 个答案:

答案 0 :(得分:2)

您必须散列密码并将散列作为参数传递。有点像:

String hash = hash(login.getPassword());
Object[] parameters = { login.getEmail(), hash };

有关如何实施hash(..)方法,请参阅this question。但是,请避免使用MD5。改为使用SHA。

答案 1 :(得分:1)

我相信您需要在调用身份验证之前将L.password转换为md5。请参阅this useful link

import java.security.*;

..

byte[] bytesOfMessage = yourString.getBytes("UTF-8");

MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(bytesOfMessage);