2次MD5加密——用于分布式对话

news/2024/7/3 7:30:14

用户端 :

        指发起请求与服务器进行交互的终端设备或应用程序。它可以是电脑、智能手机等。

        用户端负责发送请求给服务端,并接收和处理服务端返回的响应。

服务端 :

        是指提供服务接收和处理用户端请求的计算机系统或应用程序。

        它监听来自用户端的请求并根据请求类型执行相应的逻辑操作服务端处理完请求后,会生成响应并将其发送回用户端。

  • 用户端:PASS=MD5(明文+固定Salt)

  • 服务端:PASS=MD5(用户输入+随机Salt)

        用户端MD5加密是为了防止用户密码在网络中明文传输,服务端MD5加密是为了提高密码的安全性,双重保险

引入pom.xml

<!--        md5依赖-->
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
</dependency>

MD5工具类

@Component
public class MD5Util {
​
    private static final String salt = "1a2b3c4d";
​
    //对输入的字符串进行一次MD5哈希运算,返回哈希结果的十六进制表示
    public static String md5(String src) {
        return DigestUtils.md5Hex(src);
    }
​
    /*
    首先,根据事先定义的 salt 字符串,结合输入密码进行组合,生成一个新的字符串。
    然后,对该字符串进行一次MD5哈希运算,返回加密后的结果
     */
    //前端传到后端,加密一次
    public static String inputPassToFromPass(String inputPass) {
        String str = salt.charAt(0) + salt.charAt(2) + inputPass + salt.charAt(5) + salt.charAt(4);
        return md5(str);
    }
​
    //后端到数据库加密一次
    public static String fromPassToDBPass(String fromPass, String salt) {
        String str = salt.charAt(0) + salt.charAt(2) + fromPass + salt.charAt(5) + salt.charAt(4);
        return md5(str);
    }
​
    //真正调用的
    public static String inputPassToDBPass(String inputPass, String salt) {
        String fromPass = inputPassToFromPass(inputPass);
        String dbPass = fromPassToDBPass(fromPass, salt);
        return dbPass;
    }
​
    public static void main(String[] args) {
        //ce21b747de5af71ab5c2e20ff0a60eea
        System.out.println(inputPassToFromPass("123456"));
        //0687f9701bca74827fcefcd7e743d179
        System.out.println(fromPassToDBPass("ce21b747de5af71ab5c2e20ff0a60eea","1a2b3c4d"));
        //真正调用的
        System.out.println(inputPassToDBPass("123456", "1a2b3c4d"));
    }
}

        在业务逻辑类实现根据账号获取密码,接着使用MD5判断输入的密码是否正确:

//判断密码是否正确
        if (!MD5Util.fromPassToDBPass(password, user.getSalt()).equals(user.getPassword())) {
            throw new GlobalException(RespBeanEnum.LOGIN_ERROR);
        }

        需要注意的是,MD5算法虽然在过去广泛使用,但现今已经不推荐将其用于安全敏感的场景,因为MD5算法存在碰撞攻击和预计算攻击等漏洞,容易被破解。而且,单纯多次MD5运算并不能提高其安全性。对于安全加密需求,建议使用更强大和安全的哈希算法,如SHA-256、SHA-3等。


http://lihuaxi.xjx100.cn/news/1852403.html

相关文章

CentOS一键安装docker脚本

CentOS安装Docker一键脚本 在CentOS上安装Docker是许多项目中常见的任务之一。为了简化这个过程&#xff0c;你可以使用下面的一键脚本。 #!/bin/bash# 卸载旧版本&#xff08;如果有&#xff09; sudo yum remove -y docker \docker-client \docker-client-latest \docker-c…

SSM SpringBoot vue考勤信息管理系统

SSM SpringBoot vue考勤信息管理系统 系统功能 登录 注册 个人中心 部门信息管理 上班时间管理 考勤信息管理 员工信息管理 签到管理 请假信息管理 加班申请管理 出差申请管理 开发环境和技术 开发语言&#xff1a;Java 使用框架: SSM(Spring SpringMVC Mybaits)或Spring…

DCDC前馈电容与RC串并联电路

一、RC串并联电路特性分析 1、RC串联电路 RC 串联的转折频率&#xff1a; f01/&#xff08;2πR1C1&#xff09;&#xff0c;当输入信号频率大于 f0 时&#xff0c;整个 RC 串联电路总的阻抗基本不变了&#xff0c;其大小等于 R1。 2、RC并联电路 RC 并联电路的转折频率&…

使用easyExcel框架报错:服务器缺少字体

后台服务使用easyExcel框架生成表格&#xff0c;但是生成的时候报如下的错误&#xff1a; 这种报错其实就是部署服务的服务器缺少字体&#xff0c;正确的方法是安装字体。需要注意的是&#xff0c;测试环境服务器与生产环境服务器的在配置版本上可能存在差异&#xff0c;因此需…

mysql中字符串截取与拆分

按分隔符把字符串拆成多行 引言截取字符串一、left(str,length)二、right(str,length)三、截取特定长度的字符串四、按分隔符截取 分割字符串一、分割成多列二、分割成多行 总结 引言 截取和拆分字符串在编程生涯中是普遍存在的&#xff0c;在sql中也不例外&#xff0c;下面就…

获取MATLAB默认配色方案

color_map get(gca, ColorOrder)转化为 十六进制 程序参考链接 % 输入&#xff1a;1x3 行向量&#xff0c;例如 [0 113.9850 188.9550] % 输出&#xff1a;字符串&#xff0c;例如 #1183CE function HEXRGB2HEX(RGB)% RGB2HEX : 实现颜色RGB值转化haex% 输入RGB三个数的数…

windows文件删除权限

一、普通文件 这里指的是所有可以被随意删除的文件。 二、可更改权限的文件 如果想要删除的文件无法被删除&#xff0c;那大概是权限不够&#xff0c;这时候&#xff1a;鼠标右键、属性、安全、编辑、选择相应的组或用户&#xff08;如果不知道哪个可以全选&#xff0c;反正…

Elasticsearch:使用 ILM 示例运行降采样 (downsampling)

如果你对降采样还不是很熟的话&#xff0c;请阅读之前的文章 “Elasticsearch&#xff1a;对时间序列数据流进行降采样&#xff08;downsampling)”。这是一个简化的示例&#xff0c;可让你快速了解降采样如何作为 ILM 策略的一部分来减少一组采样指标的存储大小。 该示例使用典…