浅记MD5加密
一、 概述
MD5加密摘要算法,属于hash算法一类,能将任意数据映射成一个128位长的摘要信息,且不可逆
二、加密算法
1、数据填充
对加密的数据进行填充和整理,将加密的二进制数据的长度对512取模,得到的结果如果不为448位,则进行补足,补足的方法为第一位填充1,后面填充0,此时数据的位数为:N*512+448
2、补充数据长度
在第一步结果后面追加64位来存储数据的长度,追加之后,数据的位数变为(n+1) * 512位
3、核心算法
MD5的实现需要每512个字节进行一次处理,后一次处理的输入为前一次处理的输出,因此,在循环处理开始之前,需要拿4个标准数作为输入,它们分别是 A=0x67452301,B=0xefcdab89,C=0x98badcfe,D=0x10325476
介绍四个非线性函数
再介绍四种操作
FF(a,b,c,d,Mi,s,tj) 表示a=b+((a+F(b,c,d)+Mi+tj)<<< s)
GG(a,b,c,d,Mi,s,tj) 表示 a=b+((a+G(b,c,d)+Mi+tj)<<< s)
HH(a,b,c,d,Mi,s,tj) 表示 a=b+((a+H(b,c,d)+Mi+tj)<<< s)
II(a,b,c,d,Mi,s,tj) 表示a=b+((a+I(b,c,d)+Mi+tj)<<< s)
其中Mi表示消息的第i个子分组(从0到15,共16个),<<< s表示循环左移s位
常数tj为:
在第j步中,tj是4294967296*abs(sin(j))的整数部分,i的单位是弧度。
(4294967296是2的32次方)
亦可用 0x100000000UL * abs(sin((double)j)) 计算
md5运算
消息以512位为一组,进行n+1轮计算,每轮循环64次,每16次分为一组,每组循环使用上面提到的函数,处理完成后,将输出作为输入进入下一轮循环
一共进行64轮(n+1)
就像这样:
M0,M1 是上输入的值
......
截图于
http://www.noobyard.com/article/p-tisrrmqa-mz.html
最后得到的abcd即为md5值
三、代码
代码可以看下面别人的博客
https://blog.csdn.net/lnfiniteloop/article/details/114276680
http://www.noobyard.com/article/p-tisrrmqa-mz.html
https://developer.aliyun.com/article/790494
__EOF__

本文链接:https://www.cnblogs.com/lordtianqiyi/articles/16192627.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现