如何在java中从数据库中检查用户给定密码为md5格式的密码

时间:2017-12-27 13:46:11

标签: spring hibernate hql md5

我在普通字符串中输入密码

public JobSeeker validateJobSeeker(String um, String pas) {

    System.out.println("in side jobseek valid dao");
    String hql= "select j from JobSeeker j where j.emailid=:u and j.password = COMPRESS(MD5(:pass))";

    List<JobSeeker> listofjobseeker = (List<JobSeeker>) sf.getCurrentSession()
        .createQuery(hql)
        .setParameter("u", um)
        .setParameter("pass", pas).list();
    return  ( listofjobseeker.size() > 0 ) ? listofjobseeker.get(0)  : null;
}

O / p = 列表listofjobseeker = null。

这是我的表:

 select * from jobseeker;

id | confirmpassword  | emailid  | message | password | phoneno| username | usertype  | address_id |
 +----+----------------------------------+-----------------------+---------+-
    |  1 | 8337da1b34a7b4fec56bc0a418ca6e22 | xyz@gmail.com | NULL    | 
 8337da1b34a7b4fec56bc0a418ca6e22 | 123456 | Angad    | jobseeker |          1

我想验证用户登录。我将用户给定的密码转换为md5传递格式,并在user_registration时存储到数据库中。当用户使用相同的email_id和密码登录时。我无法检查md5格式的传递给用户通过。

2 个答案:

答案 0 :(得分:1)

您可以先将原始密码转换为MD5格式,然后再在数据库中进行匹配。像下面这样的方法应该有所帮助。

private static String encode(String md5){
       try {
            java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
            byte[] array = md.digest(md5.getBytes());
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < array.length; ++i) {
              sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
           }
            return sb.toString();
        } catch (java.security.NoSuchAlgorithmException e) {
        }
        return null;

    }

您可以按以下方式更改方法。

public JobSeeker validateJobSeeker(String um, String pas) {
  String encryptedPass = encode(pas);
  ...
  .setParameter("pass", encryptedPass).list();

}

答案 1 :(得分:0)

我找到了解决问题的方法。我使用SQLQUERY而不是SQL,因为我不知道HID语法匹配md5传递给用户传递:使用emaild验证用户和普通用户传递比较md5加密传递。

让我们在下面结帐:

String hql =    "SELECT IF ((SELECT password FROM JobSeeker WHERE emailid = :u) = MD5(:pass), 'true', 'false') as r ";

        SQLQuery sql =    (SQLQuery) sf.getCurrentSession()
                                                                 .createSQLQuery(hql)
                                                                   .setParameter("u", um)
                                                                      .setParameter("pass", pas);

         sql.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
         Object validate = sql.uniqueResult();
         Map map = (Map) validate;
         System.out.println("inside sys.out.print is ========= " + map.get("r"));
         String val = (String) map.get("r");
         System.out.println("val is  = " + val);

         if(val.equals("true"))
         {
             List<JobSeeker> jobSeeker = (List<JobSeeker>) sf.getCurrentSession().createQuery("select j from JobSeeker j where j.emailid =:u ")
                                                          .setParameter("u", um).list();
             return (jobSeeker.size() > 0 ) ? jobSeeker.get(0) : null ;
         }
         else{  System.out.println("Invalid User , plz retry :( ");
             return null;
         }

    }