MD5算法加密笔记

news/2024/11/28 20:09:29/

MD5是常见的摘要算法。

摘要算法

是指把任意⻓度的输⼊消息数据转化为固定⻓度的输出数据的⼀种密码算法. 摘要算法是 不可逆的, 也就是⽆法解密. 通常⽤来检验数据的完整性的重要技术, 即对数据进⾏哈希计算然后⽐ 较摘要值, 判断是否⼀致. 常⻅的摘要算法有: MD5, SHA系列(SHA1, SHA2等), CRC(CRC8, CRC16, CRC32)

 摘要算法存在的客观问题:

虽然经过MD5加密后的密⽂⽆法解密, 相同的密码经过MD5哈希之后的密⽂是相同的
当存 储⽤⼾密码的数据库泄露后, 攻击者会很容易便能找到相同密码的⽤户, 从⽽降低了破解密码的难度。

 MD5加密思路:

盐本质上就是一个随机的字符串。

我们采⽤为⼀个密码拼接⼀个随机字符串(盐)来进⾏MD5加密,然后我们把盐和MD5加密的密文拼接后存储到数据库。
存储:盐值 + MD5(盐值+password)

 代码: 

import org.springframework.util.DigestUtils;import java.util.UUID;public class SecurityUtil {/*** 加密* password 用户注册时输入的密码* return: 数据库中存储的信息:  盐值 + md5(明文+盐值)*/public static String encrypt(String password){//生成随机盐值String salt = UUID.randomUUID().toString().replace("-","");//对 明文+盐值  进行MD5加密 =>   md5(明文+盐值)String finalPassword = DigestUtils.md5DigestAsHex((password+salt).getBytes());//盐值 + MD5(盐值+password)return salt+finalPassword;}
}
MD5解密思路:
如果⽤户输⼊的密码和盐值⼀起拼接后的字符串经过MD5加密后, 得到的密⽂与数据库存储的密文相同, 我们就认为密码正确。

图解:

代码:

/*** 验证密码是否正确* @param inputPassword  用户登录时输入的密码* @param sqlPassword  数据库中password字段存储的信息   盐值 + md5(明文+盐值)* @return*/public static boolean verify(String inputPassword, String sqlPassword){if (!StringUtils.hasLength(inputPassword)){return false;}if (sqlPassword==null || sqlPassword.length() !=64){return false;}//获取盐值String salt = sqlPassword.substring(0,32);//根据用户登录输入的密码和盐值, 进行加密    md5(明文+盐值)String finalPassword = DigestUtils.md5DigestAsHex((inputPassword+salt).getBytes());return (salt+finalPassword).equals(sqlPassword);}


以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 


http://www.ppmy.cn/news/1550713.html

相关文章

Java线程同步Synchronized

在Java中,可以使用synchronized关键字实现线程同步。synchronized关键字可以用来修饰方法或代码块,保证在同一时间内只有一个线程可以执行被synchronized关键字修饰的代码。 当一个方法被synchronized修饰时,该方法称为同步方法。同一时间内…

代数拓扑学

代数拓扑学是数学中的一个分支领域,旨在研究代数结构与拓扑空间之间的关系。它主要关注拓扑空间的代数特征,以及代数结构的拓扑性质。 代数拓扑学的核心概念包括拓扑空间、群、环、域、模、代数拓扑空间等。通过将代数结构的性质与拓扑空间的性质相结合…

三维地形图计算软件(三)-原基于PYQT5+pyqtgraph旧代码

最先入手设计三维地形图及平基挖填方计算软件时,地形图的显示方案是:三维视图基于pyqtgraph.opengl显示和二维视图基于pyqtgraph的PlotWidget来显示地形地貌,作到一半时就发现,地形点过多时,将会造成系统卡顿(加载时主…

HarmonyOS 3.1/4项目在DevEco Studio 5.0(HarmonyOS NEXT)版本下使用的问题

有读者在使用《鸿蒙HarmonyOS应用开发入门》书中的源码时,遇到了问题。本文总结问题的原因及解决方案。 有读者在使用《鸿蒙HarmonyOS应用开发入门》书中的源码时,遇到了问题。本文总结问题的原因及解决方案。 问题原因 这些问题,本质上是…

一文了解TensorFlow是什么

TensorFlow是一个开源的机器学习框架,由Google开发并维护。它提供了一个灵活且高效的环境,用于构建和训练各种机器学习模型。 TensorFlow的基本概念包括: 张量(Tensor):TensorFlow中的核心数据结构&#x…

HarmonyOS(57) UI性能优化

性能优化是APP开发绕不过的话题,那么在HarmonyOS开发过程中怎么进行性能优化呢?今天就来总结下相关知识点。 UI性能优化 1、避免在组件的生命周期内执行高耗时操作2、合理使用ResourceManager3、优先使用Builder方法代替自定义组件4、Component组件和Bui…

零基础学安全--HTML

目录 学习连接 HTML简介 HTML基本结构 例子 表单标签 表格标签 超链接标签 学习连接 声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提…

利用浏览器录屏

以下内容参考自网络 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title></title> </head> <body> <div class"left"> <di…