共计 1279 个字符,预计需要花费 4 分钟才能阅读完成。
拜访【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