Hash函数
MD5
基本描述
MD5 的输入输出如下
- 输入:任意长的消息,512 比特长的分组。
- 输出:128 比特的消息摘要。
MD5算法的原理可简要的叙述为:MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
总体流程如下图所示,每次的运算都由前一轮的128位结果值和当前的512bit值进行运算 。
其底层实现较为复杂(sigh)
此外,有时候我们获得到的 md5 是 16 位的,其实那 16 位是 32 位 md5 的长度,是从 32 位 md5 值来的。是将 32 位 md5 去掉前八位,去掉后八位得到的。
一般来说,我们可以通过函数的初始化来判断是不是 MD5 函数。一般来说,如果一个函数有如下四个初始化的变量,可以猜测该函数为 MD5 函数,因为这是 MD5 函数的初始化 IV。
0x67452301,0xEFCDAB89,0x98BADCFE,0x10325476
破解
目前可以说 md5 已经基本被攻破了,一般的 MD5 的碰撞都可以在如下网上获取到