大家好,欢迎来到IT知识分享网。
文章目录
零、前言
一、MD5 概述
1、什么是 MD5 ?
MD5,讯息摘要演算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值(hash value),用于确保信息传输完整一致。
2、MD5的特性
- 长度固定
无论输入多少,输入固定为 16 字节 ,相当于超损压缩。 - 不可逆
无法从结果反推原始数据。由于长度固定的特性,中间会丢掉一些信息。因此,相同数据的MD5值肯一样,不同数据的MD5值几乎不可能一样。
MD5 是摘要算法,由MD5产生的编码之于正文,正如指纹之于人一样,只要正文不变,那么摘要就不变。
因为MD5是有限多个的而原文可以是无数多个。因此,一个MD5理论上可能对应无数多个原文的。主流的MD5将 任意长度 的字节串 映射 为一个 128bit 的 大整数 ,一共有 2128 种可能,尽管这个数字是有限多个的,但是世界上可以被用来加密的原文却有无数的可能性。这就好比,只知道指纹与人的关系。 - 高度离散型 (抗修改性)
输出的16个字节,没有规律可言,因此结果也无法预测。同时,对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。 - 抗碰撞性
想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。同样地,已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
二、MD5 算法原理
MD5算法的原理是 将输入的消息分成 512位 的 数据块 ,每个数据块 再分成 16 个 32位 的 小块,通过一系列的 位运算 和 非线性函数 ,对 每个小块 进行 处理 ,最终得到 一个 128位 的 哈希值。由于MD5算法的设计,即使输入的消息只有微小的变化,也会导致 输出的哈希值 发生巨大的变化,因此可以用来 验证 数据的完整性 和 真实性。
1、数据填充
数据填充,即进行 补位
操作
- 目的:对消息进行数据填充,使得 长度 变成 N*512 + 448 该步骤必须进行
- 方法:先补一个 1 再补上 多个 0 ,使得总长度 除于 512 的余数 为 448
2、添加消息长度
- 目的:使得最终消息长度就是512的整数倍。使得消息长度变成 (N+1)*512
- 方法:在第一步结果之后再填充上原消息的长度,可用来进行的存储长度为64位。如果消息长度大于264,则只使用其低64位的值,即(消息长度 对 264取模)。
- 注意:哪怕 MD5 消息已经是正确的长度,也必须填充MD5消息长度。
3、初始化MD缓存器
4、处理数据段
- 定义4个非线性函数F、G、H、I,对输入的报文运算以512位数据段为单位进行处理。
- 对每个数据段都要进行4轮的逻辑处理,在4轮中分别使用4个不同的函数F、G、H、I。
- 每一轮以ABCD和当前的512位的块为输入,处理后送入ABCD(128位
三、MD5 的 用途
1、密码存储
常见的MD5 密码存储方式:
- 使用哈希存储密码;
- 使用哈希加盐存储密码;
- 使用加密算法存储密码;
- 使用 bcrypt 存储密码;
2、数字签名
MD5 将整个文件当做一个大文本信息,通过不可逆的字符串变换算法,产生一个唯一的 MD5 信息摘要。需要注意,这需要一个第三方认证机构。例如A写了一个文件,认证机构对此文件用MD5算法产生摘要信息并做好记录。若以后A说这文件不是他写的,权威机构只需对此文件重新产生摘要信息,然后跟记录在册的摘要信息进行比对,相同的话,就证明是A写的了。这就是所谓的“数字签名”。
3、文件完整性校验
MD5 将整个文件当做一个大文本信息,通过不可逆的字符串变换算法,产生一个唯一的 MD5 信息摘要;
4、垃圾邮件筛选
四、常见面试题
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/133110.html