MD5算法说明
|
|
<!-- 正文begin -->
1、MD5算法是对输入的数据进行补位,使得如果数据位长度LEN对512求余的结果是448。即数据扩展至K*512+448位。即K*64+56个字节,K为整数。具体补位操作:补一个1,然后补0至满足上述要求
2、补数据长度:用一个64位的数字表示数据的原始长度B,把B用两个32位数表示。这时,数据就被填补成长度为512位的倍数。
3.初始化MD5参数:四个32位整数(A,B,C,D)用来计算信息摘要,初始化使用的是十六进制表示的数字
A=0X01234567
B=0X89abcdef
C=0Xfedcba98
D=0X76543210
4、处理位操作函数
X,Y,Z为32位整数。
F(X,Y,Z)=X&Y|NOT(X)&Z
G(X,Y,Z)=X&Z|Y?(Z)
H(X,Y,Z)=XxorYxorZ
I(X,Y,Z)=Yxor(X|not(Z))
5、主要变换过程:使用常数组T[1...64],T[i]为32位整数用16进制表示,数据用16个32位的整数数组M[]表示。
具体过程如下:
/*处理数据原文*/
Fori=0toN/16-1do
/*每一次,把数据原文存放在16个元素的数组X中.*/
Forj=0to15do
SetX[j]toM[i*16+j].
end/结束对J的循环
/*SaveAasAA,BasBB,CasCC,andDasDD.*/
AA=A
BB=B
CC=C
DD=D
/*第1轮*/
/*以[abcdksi]表示如下操作
a=b+((a+F(b,c,d)+X[k]+T[i])<<<s).*/
/*Dothefollowing16operations.*/
[ABCD071][DABC1122][CDAB2173][BCDA3224]
[ABCD475][DABC5126][CDAB6177][BCDA7228]
[ABCD879][DABC91210][CDAB101711][BCDA112212]
[ABCD12713][DABC131214][CDAB141715][BCDA152216]
/*第2轮**/
/*以[abcdksi]表示如下操作
a=b+((a+G(b,c,d)+X[k]+T[i])<<<s).*/
/*Dothefollowing16operations.*/
[ABCD1517][DABC6918][CDAB111419][BCDA02020]
[ABCD5521][DABC10922][CDAB151423][BCDA42024]
[ABCD9525][DABC14926][CDAB31427][BCDA82028]
[ABCD13529][DABC2930][CDAB71431][BCDA122032]
/*第3轮*/
/*以[abcdksi]表示如下操作
a=b+((a+H(b,c,d)+X[k]+T[i])<<<s).*/
/*Dothefollowing16operations.*/
[ABCD5433][DABC81134][CDAB111635][BCDA142336]
[ABCD1437][DABC41138][CDAB71639][BCDA102340]
[ABCD13441][DABC01142][CDAB31643][BCDA62344]
[ABCD9445][DABC121146][CDAB151647][BCDA22348]
/*第4轮*/
/*以[abcdksi]表示如下操作
a=b+((a+I(b,c,d)+X[k]+T[i])<<<s).*/
/*Dothefollowing16operations.*/
[ABCD0649][DABC71050][CDAB141551][BCDA52152]
[ABCD12653][DABC31054][CDAB101555][BCDA12156]
[ABCD8657][DABC151058][CDAB61559][BCDA132160]
[ABCD4661][DABC111062][CDAB21563][BCDA92164]
/*然后进行如下操作*/
A=A+AA
B=B+BB
C=C+CC
D=D+DD
end/*结束对I的循环*/
6、输出结果。
|
分享到:
相关推荐
Java作为一种强大的编程语言,提供了多种方式来生成MD5编码。本篇文章将深入探讨如何使用Java实现MD5哈希计算,以及它在实际应用中的价值。 首先,MD5的主要用途在于数据完整性校验和密码存储。当用户输入密码时,...
本话题将深入探讨如何使用Gradle来生成MD5(Message-Digest Algorithm 5)编码,这是一种广泛用于验证数据完整性的哈希函数。 标题“Gradle生成md5代码”指的是利用Gradle脚本来计算文件或字符串的MD5值。在Android...
标题提到的"JS生成MD5值和JAVA生成MD5值",实际上是指在JavaScript和Java这两种不同的编程语言中,如何对同一份数据计算MD5哈希值。由于MD5算法是公开的,理论上在任何支持该算法的编程环境下都应该得到相同的输出。...
MD5编码器是一种用于生成128位(16字节)散列值的加密算法,常用于数据完整性校验和密码存储。在本场景中,"gadget MD5编码器"指的是使用特定技术,可能是利用计算机内存中的指令序列(gadgets)来实现MD5计算的一个...
这个例子使用了`openssl`库,首先初始化MD5上下文,然后对输入字符串进行更新,最后生成16字节的摘要并转换为16进制字符串。 在`md5test`这个项目中,可能包含了一个测试程序,用于验证上述MD5编码功能是否正确。...
### MD5编码算法详解 #### 一、简介 MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,可以将任意长度的数据转换为一个固定长度(通常是128位)的十六进制字符串。这种算法在数据完整性检查、密码存储...
这两个类结合使用,可以实现更加灵活的MD5哈希功能,比如在处理中文字符串时保证编码正确性,并根据需求生成不同长度的MD5摘要。这对于开发人员来说是非常实用的,特别是在进行数据验证或者安全相关的应用中。在使用...
功能和界面见介绍https://jiuai.blog.csdn.net/article/details/115982294 看清需求后如需要了再下载!自行决定不喜勿喷,欢迎指导
MD5加密解密工具,就我所知,MD5的目标是生成摘要。...据说有个叫王小云的女数学家破解了MD5算法,我觉得应该是看到一个MD5编码,就可以找到一个序列,生成的MD5编码刚好是被破解的那个MD5编码,这样的吧
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的输入...`MD5Generator`可能是用来帮助用户生成MD5哈希值的工具,尽管在密码安全上已不推荐,但在数据校验和其他非安全场景下仍然有用。
在批处理文件中,可能使用了Java的命令行工具`javac`来编译源代码,并用`java`命令运行生成的类文件,实现MD5加密功能。用户只需提供待加密的字符串,批处理文件将自动调用Java程序计算MD5值并显示结果。 总的来说...
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,可以将任意长度的数据转换为固定长度的输出,通常是...至于"36位MD5加密字符",这可能涉及到对原始MD5值的特殊编码或格式化,具体实现需结合源代码分析。
MD5(Message-Digest Algorithm 5)编码算法是一种广泛使用的哈希函数,设计者为美国计算机科学家Ronald Rivest。这种算法能够将任意长度的数据转化为一个固定长度的输出,通常是128位,通常以32个十六进制数字表示...
MD5的主要用途是生成数据的数字指纹,即通过输入的数据计算出一个固定长度的摘要(通常为128位,通常表示为32位的十六进制字符串)。这种摘要具有单向性,即从摘要难以反推出原始数据,使得MD5常用于验证数据的完整...
4. **生成MD5摘要**:经过上述步骤,得到128位的摘要,通常以16进制形式展示为32个字符的字符串。 5. **显示或比较MD5值**:计算出的MD5值可以用来与已知的MD5值进行对比,以验证数据的完整性。在VB6.0中,你可以...
这个哈希值是唯一的,即使是最微小的输入数据变化也会导致生成的MD5值完全不同。 在C++中,我们可以利用开源库如`openssl`来实现MD5计算。以下是一个简单的步骤来说明如何在VC/MFC项目中实现这个功能: 1. **添加...
- 32位MD5的生成过程中,直接将这四个32位整数转换为十六进制字符串并连接起来。 - 40位MD5的生成则在此基础上,额外添加了一个WordToHex(c)作为前缀。这里的WordToHex(c)即为c的十六进制表示。 ### 结论 综上所述...
在提供的压缩包文件“MD5”中,可能包含了一个Java程序示例,演示了如何使用MD5加密并生成32位小写的哈希值。这个程序可以作为一个基础模板,帮助开发者快速集成MD5功能到自己的项目中。 总之,MD5是一种便捷的哈希...
描述中的“**使用C++实现字符串计算16位md5和32位的md5**”意味着我们需要用C++语言编写代码,处理输入的字符串,通过特定算法生成16位和32位的MD5摘要。在C++中,这通常涉及到对字符串进行二进制操作、使用位运算...