如果使用MD5加密密码,如何在服务器端的Java中验证密码规则?

问题描述 投票:0回答:1
    <!-- language: lang-java -->

        try 
        {
          DAO ddao = new DAO();
          HttpSession session = request.getSession();
          userBean ub = null;

          if (session.getAttribute("userdet") != null) 
          {
            ub = (userBean) session.getAttribute("userdet");
          }

          if (ub == null)   
          {
            return mapping.findForward("sesexpire");
          }

          if (!formValidation.validationTest(request)) 
          {
            session.invalidate();
            return mapping.findForward("hack");
          }

          if (!StringUtils.isEmpty(request.getMethod()) && request.getMethod().equalsIgnoreCase("POST")) 
          {
            // how to perform server side validation for password field rules like
 1) Password must contain atleast eight characters.
    2) Password must not exceed 255 characters.
    3) Password must contain atleast one number (0-9)
    4) Password must contain atleast one lowercase letter (a-z)
    5) Password must contain atleast one uppercase letter (A-Z)
    6) Password must contain atleast one special character. due to md5 is applied at client side
          }
        } catch (Exception e) 
        {

        }
java validation java-ee-6
1个回答
0
投票

正如Trinopoty所说,MD5不是一种加密算法,而是一种哈希算法。这意味着这仅是单向的,您不应将其反向。

但是,对于MD5算法(从现在开始已有很多年了),这不再是正确的。

您可以执行的一种方法是破解密码。 github中有很多实现(只需搜索“ MD5彩虹表”)。然后,只需执行验证即可。

您可以在http://reversemd5.com/之类的在线服务上进行测试>

此外,请注意,这是非常不安全的(并且性能代价很高)。如果您有违规行为,则将密码散列在MD5中与将密码散列为纯文本相同。

注册或更改密码时,您应该使用安全连接通道(HTTPS),以明文形式接收密码,执行验证并使用安全哈希机制(BCrypt或PBKDF2)将其存储。

[当用户登录时,只需对接收到的密码进行哈希处理并将其与您存储在数据库中的密码进行比较。

© www.soinside.com 2019 - 2024. All rights reserved.