• MD5 加盐加密


    一、概述

      MD5(Message Digest  Algorithm 5),是一种散列算法,是不可逆的,即通过md5加密之后没办法得到原文,没有解密算法。

      在一般的项目中都会有登录注册功能,最简单的,登录注册过程完全没有加密,存储在数据库的密码也是明文,安全性是很差的,万一数据泄露就不好了(表一)。所以,通过MD5将密码加密后保存在数据库中(表二),在登录的过程中后端将从前端获取到的密码加密,对照数据库中已经加密的密码。

      但是一般加密算法固定,很容易破解,安全系数低,就我所知,有很多网站可以直接破解密文。为了提高安全性,可以采取加盐的方式。生成一组随机串,保存在数据库中,然后混杂在原来的密码中,再通过加密算法加密,存进数据库中(表三)。

                                

                           表一

            

                         表二

            

                         表三

       至于MD5加密算法的底层原理,参考这篇博客:https://blog.csdn.net/sinat_27933301/article/details/79538169

    二、代码实现

      Java有挺多关于MD5加密的方法,这里就用Spring中的 DigestUtils.md5DigestAsHex() 实现。

    public class MD5Util {
        public String passwordEncryptor(String password){
            return DigestUtils.md5DigestAsHex(password.getBytes());
        }
    }

      从前端获取用户输入的用户名,查找数据库中的 salt,并混在用户输入的密码中,这里我直接把 salt 加在后面

    // 省略很多代码,包括查找数据库的代码
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    String salt = impUserService.findSalt(username);
    String mdPassword = md5Util.passwordEncryptor(password + salt);
    User user = impUserService.find(username, mdPassword);

    三、其他的问题

      用户登录时的密码需要在前端用js加密后再提交吗?

      我个人想法,应该是不用的。可能觉得前端明文传输给后端的话,过程中如果能被人截取到,那不是挺危险的。但是既然能获取,那前端的加密算法也暴露了,所以感觉像是做无用功。当然这只是我个人想法,有知道的或者有其他想法的大佬跟我说一下哈哈哈。

  • 相关阅读:
    OpenSSL生成证书、密钥
    js中对String去空格
    正则表达式
    webapi调用
    记一次完整的CI持续集成配置过程(.net core+Jenkins+Gitea)
    处理asp.net core连接mysql的一个异常Sequence contains more than one matching element
    asp.net core 3.1+mysql8.0+Hangfire遇到的异常解决记
    升级到asp.net core 3.1遇到的json异常
    了解ASP.NET Core端点路由
    asp.net core 2.2升到3.1遇到的问题小记
  • 原文地址:https://www.cnblogs.com/lyuzt/p/11892725.html
Copyright © 2020-2023  润新知