md5 加密原理
MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,其原理可以清晰地分为以下几个步骤
填充(Padding):
- 首先,对输入的信息进行填充。填充的目的是确保信息的长度是512位的整数倍。
- 填充的方法是在信息的末尾添加一个1,然后添加若干个0,直到信息的长度满足对512取模后余数为448的条件。
- 在这个填充后的信息末尾,再附加一个以64位二进制表示的原始信息长度。
初始化(Initialization):
- 初始化四个32位的寄存器(A、B、C、D),这些寄存器用于存储计算过程中的中间结果。
- 初始时,这四个寄存器的值通过一个预定义的方式设置,且每次加密过程的初始值都是相同的。
分组处理(Processing in Blocks):
- 将填充好的信息分成若干个512位的块,然后对每个块进行处理。
- 每个512位的块又被进一步分成16个32位的子块(M[0]、M[1]、...、M[15])。
循环运算(Rounds of Computation):
- MD5算法总共进行四轮循环运算,每轮循环包括16次操作,总共64次操作。
- 在每一轮循环中,都会对寄存器A、B、C、D进行一系列的非线性函数、位操作和常量值的处理,然后得到新的寄存器数值。
输出(Output):
- 经过四轮循环运算后,MD5算法得到的四个寄存器(A、B、C、D)的数值级联起来,就构成了最终的128位哈希值。
- 这个哈希值通常会被转化为16进制格式进行输出,形式为32个字符。
总结来说,MD5算法的原理是将任意长度的输入信息通过填充、初始化、分组处理、循环运算和输出等步骤,最终转换成一个128位的哈希值,用于确保信息传输的完整性和一致性