一路学来 记得笔记不少 但是给自己看 当时就记得很随意 以为后面都懂 但还是太单纯了,现在回顾 自己都完全看不下去,所以以后的都放的博客上,让自己看懂,让感兴趣的看懂,详细,暴力 不废话了
MD5算法详解
0x01定义:网上很多啊
MD5算法是单向散列算法的一种。单向散列算法也称为HASH算法,是一种将任意长度的信息压缩至某一固定长度(称之为消息摘要)的函数(该压缩过程不可逆)
我们是对一个字符串进行MD5加密,所以我们先从字符串的处理开始。首先我们要知道一个字符的长度是8位(bit),即一个字节的长度。现在我们要做的就是将一个字符串Str1分割成每512位为一个分组,形如N*512+R,最后多出来的不足512位的R部分先填充一个1,再接无数个0,直到补足512位。这里要注意,R为0时也要补位,这时候补512位,最高位1,形如1000…00;如果R超出448,除了要补满这个分组外,还要再补上一个512位的分组(因为超过448位则不能留64位出来存放字符串的原长)。
接着,讲讲将字符串分块保存部分。一个512位的字符串分组要分成16个32位的子分组,在每个32位中,以字节为单位通过小端规则存入一个32位的变量中,可以考虑用int类型的变量(一个int变量32位),也可以考虑用unsigned int,这样之后涉及的循环移位就不用考虑符号位了,这里还是以int为例。因为一个字符就是一个字节(8位),所以一个int类型变量能存放4个字符,假设一个字符
