拜访【WRITE-BUG数字空间】_[内附残缺源码和文档]

用c++实现md5算法。 开发平台:Ubuntu14.04

md5
用c++实现md5算法.

开发平台
Ubuntu14.04

运行
sudo get-apt install g++

make

./md5_test

md5简介
音讯摘要算法第五版(英语:Message-Digest Algorithm 5,缩写为MD5),是以后计算机领域用于确保信息传输残缺统一而宽泛应用的散列算法之一(又译哈希算法、摘要算法等),支流编程语言广泛已有MD5的实现。将数据 (如一段文字)运算变为另一固定长度值,是散列算法的根底原理,MD5的前身有MD2、MD3和MD4。MD5由MD4、MD3、MD2改良而来,次要加强算法复杂度和不可逆性。目前,MD5算法因其广泛、稳固、疾速的特点,仍广泛应用于一般 数据的谬误查看畛域。例如在一些BitTorrent下载中,软件将通过计算MD5测验下载到的文件片段的完整性。MD5曾经宽泛应用在为文件传输提供肯定的可靠性方面。例如,服务器事后提供一个MD5校验和,用户下载完文件当前, 用MD5算法计算下载文件的MD5校验和,而后通过查看这两个校验和是否统一,就能判断下载的文件是否出错。MD5是输出不定长度信息,输入固定长度128-bits的算法。通过程序流程,生成四个32位数据,最初联结起来成为一个 128-bits散列。根本形式为,求余、取余、调整长度、与链接变量进行循环运算。得出后果。

md5算法形容
假如输出信息(input message)的长度为b(bit),咱们想要产生它的报文摘要,在此处b为任意的非负整数:b也可能为0,也不肯定为8的整数倍,且可能是任意大的长度。设该信息的比特流示意如下: M[0] M[1] M[2] ... M[b-1] 计算此信息的报文摘要须要如下5步:

1.补位
信息计算前先要进行位补位,设补位后信息的长度为LEN(bit),则LEN%512 = 448(bit),即数据扩大至 K 512 + 448(bit)。即K 64+56(byte),K为整数。补位操作始终要执行,即便补位前信息的长度对512求余的后果是448。具体补位操作:补一个1,而后补0至满足上述要求。总共起码要补1bit,最多补512bit。

2.尾部加上信息长度
将输出信息的原始长度b(bit)示意成一个64-bit的数字,把它增加到上一步的后果前面(在32位的机器上,这64位将用2个字来示意并且低位在前)。当遇到b大于2^64这种极少的状况时,b的高位被截去,仅应用b的低64位。通过下面两步,数据就被填补成长度为512(bit)的倍数。也就是说,此时的数据长度是16个字(32byte)的整数倍。此时的数据表示为: M[0 ... N-1] 其中的N是16的倍数。

3.初始化缓存区
用一个四个字的缓冲器(A,B,C,D)来计算报文摘要,A,B,C,D别离是32位的寄存器,初始化应用的是十六进制示意的数字,留神低字节在前: word A: 01 23 45 67 word B: 89 ab cd ef word C: fe dc ba 98 word D: 76 54 32 10