当前位置: 首页 > news >正文

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

用户端 :

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

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

服务端 :

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

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

  • 用户端: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) {//ce21b747de5af71ab5c2e20ff0a60eeaSystem.out.println(inputPassToFromPass("123456"));//0687f9701bca74827fcefcd7e743d179System.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://www.lryc.cn/news/249149.html

相关文章:

  • 用Java制作简易版的王者荣耀
  • android 保活的一种有效的方法
  • kibana安装
  • LV.12 D19 ADC实验 学习笔记
  • ubuntu配置免密登录vscode
  • 软件工程--面向对象分析用通俗语言20小时爆肝总结!(包含用例图、活动图、类图、时序图......)
  • HarmonyOS—ArkTS中@Observed和@ObjectLink装饰器的嵌套类对象属性变化【鸿蒙专栏-11】
  • 网络通信安全的坚固防线双向认证技术详解
  • Appium+python+unittest搭建UI自动化框架
  • 使用paddledetection的记录
  • MySQL数据库的备份与恢复
  • Pycharm配置jupyter使用notebook详细指南(可换行conda环节)
  • 企业微信ipad版,http协议接口发开,获取客户群列表
  • Double 4 VR智能互动教学系统在小语种课堂中的教学应用
  • OSEK OS任务调度的底层逻辑
  • ‘tsc‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  • windows文件删除权限
  • Nginx的location块相关知识积累(包括常用的正则匹配表达式的介绍)
  • rabbitMq确认机制之ConfirmType
  • ubuntu下QT搭建Android开发环境
  • QT 做一个登录,注册的跳转页面
  • 数据库第十第十一章 恢复和并发简答题
  • Vue3:利用vueusejs键盘绑定
  • Python与设计模式--设计原则
  • Spire.Office 8.11.2 for NET fix Crack
  • ubuntu终端代理配置
  • postgresql从入门到精通 - 第35讲:中间件PgBouncer部署|PostgreSQL教程
  • 因为jsp for循环的一个空格引起的错误
  • 文件中找TopK问题
  • React 入门使用 (官方文档向 Part2)