MD5加密

举报
计蒙不吃鱼 发表于 2025/06/03 23:33:00 2025/06/03
【摘要】 MD5(Message-Digest Algorithm 5)是一种单向加密算法,将任意长度的数据转换为128位固定长度的散列值,主要用于数据完整性校验和密码存储。其特点包括不可逆运算、高度离散性和相同输入生成一致结果。然而,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.不可逆运算
2. 具有高度的离散性
3. 对相同的数据加密,得到的结果是一样的(也就是复制)。
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;
    }
}

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。