MD5加密

简介: MD5(Message-Digest Algorithm 5)是一种单向加密算法,将任意长度的数据转换为128位固定长度的散列值,主要用于数据完整性校验和密码存储。其特点包括不可逆运算、高度离散性和相同输入生成一致结果。然而,MD5存在碰撞风险,直接加密密码不安全,需配合“加盐”处理增强安全性。文中提供了未加盐的MD5工具类`MD5Utils`,核心方法`msgToMD5`实现基本加密功能。尽管MD5理论上不可逆,但通过彩虹表等手段可能存在伪破解风险,建议结合多种加密算法提升安全性。

MD5加密

简介:MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),它是一种单向加密算法,可以将输入的信息加密转换为128位固定长度的散列值,用于检验数据传输过程中的完整性。在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。

出现的两种观点:
1.MD5属不属于加密算法,因为只可以加密,无法获得密码原文,只能属于算法。
2.正因为看不到原文,使得原文得到加密处理。

特性:
**1.不可逆运算

  1. 具有高度的离散性
  2. 对相同的数据加密,得到的结果是一样的(也就是复制)。
    4.弱碰撞性**

用途:
1.密码的加密存储
2.一致性检验
3.文件上传

其他:
1.作为一种散列算法,虽然很难发生散列碰撞,但是经过证实,仍然存在两种不同数据会发生碰撞。
2.将用户的密码直接MD5后存储在数据库是不安全的,需要随机盐值的配合。(加盐)

加盐:“盐”就是一串比较复杂的字符串。加盐的目的是加强加密的复杂度,这么破解起来就更加麻烦(前提是“盐”没泄漏出去!)
一般使用的加盐:
md5(Password+UserName),即将用户名和密码字符串相加再MD5,这样的MD5摘要基本上不可反查。
但有时候用户名可能会发生变化,发生变化后密码即不可用了。

有人可能头晕,既然是不可逆的,为什么会有破解:
博主说的破解是伪破解,相信大家在网上查MD5解密会出现一堆的工具,这是为什么呢?
比如,123456通过md5加密后是e10adc3949ba59abbe56e057f20f883e,将其放入数据库的,下次通过数据库查询自然也能查询到,所以不过的一个数据库的查询。

所以大多时候,没有绝对的不可破解,为了加强破解难度,可以多种加密算法一起配合使用

MD5Utils(MD5加密工具类!未加盐)

用途:加密
功能:
msgToMD5:加密操作`

public class MD5Utils {
    /**
     * MD5加密操作
     *@param string
     */
    public static String msgToMD5(String string) {
        StringBuilder sb = new StringBuilder();
        try {
            //获取数据摘要器
            //参数:加密的方式
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            //摘要数据
            //参数:将要加密的明文转成byte数组
            byte[] digest = messageDigest.digest(string.getBytes());
            //加密操作
            for (int i = 0; i < digest.length; i++) {
                //MD5加密的核心原理:将一个byte数组通过与int类型进&运算得到一个int类型的正整数
                int result = digest[i] & 0xff;
                //可能得到的int数据会造成MD%加密的密文比较长,所以进行一个16进制的转换
                String hexString = Integer.toHexString(result);
                if (hexString.length() < 2) {
                    sb.append("0");
                }
                sb.append(hexString);
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return string;
    }
}
相关文章
|
25天前
|
存储 安全 算法
用 MD5 加密 WordPress 验证码的完整教程
本文详细介绍了如何使用MD5加密技术增强WordPress验证码的安全性。通过将验证码答案以MD5形式加密并存储在Session中,避免了明文传输可能带来的安全风险。文章从形势分析、MD5算法介绍到实战操作步骤,逐步引导读者实现加密验证流程。同时提供了调试方法,确保修改生效。此教程旨在为网站添加一层安全保障,提升对抗网络攻击的能力。
68 1
|
11月前
|
存储 NoSQL 数据库
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
这篇文章讲述了在分布式微服务系统中添加用户注册和登录功能的过程,重点介绍了用户注册时通过远程服务调用第三方服务获取短信验证码、使用Redis进行验证码校验、对密码进行MD5加密后存储到数据库,以及用户登录时的远程服务调用和密码匹配校验的实现细节。
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
|
10月前
|
数据安全/隐私保护 Python
Python中的MD5加密“解密”
Python中的MD5加密“解密”
236 0
|
算法 Java 数据处理
Java中MD5加密算法的实现
Java中MD5加密算法的实现
|
9月前
|
存储 Java 数据库
密码专辑:对密码加盐加密,对密码进行md5加密,封装成密码工具类
这篇文章介绍了如何在Java中通过加盐和加密算法(如MD5和SHA)安全地存储密码,并提供了一个密码工具类PasswordUtils和密码编码类PasswordEncoder的实现示例。
339 10
密码专辑:对密码加盐加密,对密码进行md5加密,封装成密码工具类
|
9月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
168 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
11月前
|
存储 算法 Java
在Java中使用MD5对用户输入密码进行加密存储、同时登录验证。
这篇文章详细介绍了在Java项目中如何使用MD5算法对用户密码进行加密存储和登录验证,包括加入依赖、编写MD5工具类、注册时的密码加密和登录时的密码验证等步骤,并通过示例代码和数据库存储信息展示了测试效果。
在Java中使用MD5对用户输入密码进行加密存储、同时登录验证。
|
11月前
|
数据采集 数据可视化 数据挖掘
基于python django的scrapy去哪儿网数据采集与分析,包括登录注册和可视化大屏,有md5加密
本文介绍了一个基于Python和Django框架,使用Scrapy进行去哪儿网数据采集与分析的项目,包括实现登录注册功能、MD5加密以及通过可视化大屏展示分析结果的综合系统。
153 1
基于python django的scrapy去哪儿网数据采集与分析,包括登录注册和可视化大屏,有md5加密
|
9月前
|
数据安全/隐私保护 Python
Python中的MD5加密“解密”
Python中的MD5加密“解密”
233 0
|
9月前
|
IDE 开发工具 数据安全/隐私保护
Python编程实现批量md5加密pdf文件
Python编程实现批量md5加密pdf文件
121 0