测试代码语言 :
C++
测试环境 :
ThinkPad T460 、CPU:i5-6200 、内存:16G 、主频 :2.4GHz 、VS2017(p)
测试内容 :
MD5
结论
(在当前使用的 MD5 方法下: )
1: MD5 校验时长 会随 待校验文件内容线性增长,即约 100M/s (与运行环境相关)
2: MD5 校验压缩文件,即使改变压缩文件内某一文件的位置,md5值也会改变;
3: MD5 校验不支持文件夹单次校验(当前MD5 测试方式下)。
测试单个文件:
1M pdf 文件,生成 MD5 校验时长 约 0,01s
142M exe 文件,生成 MD5 校验时长 约 1.39s
538M flv 文件,生成MD5 校验时长 约 5.26s
1.89G rar 文件,生成MD5 校验时长 约 19.06s
压缩文件测试:
1.89G rar 压缩文件
修改内容:
保证文件大小相同,仅互换了压缩文件内的一个1KB 的 TXT文件中各31个“,” 和“。”的位置。MD5校验生成的值产生了变化。
由:
MD5 Code:3f5c55b03621ed833d78999083ccef2f
变至:
MD5 Code:2a8ecb1cff1a274241acbf6073f1d965
测试运行截图:
机器截图:
附一:附上测试代码
// MD5Test.cpp: 定义控制台应用程序的口点。
//
#include "stdafx.h"
#include "iostream"
#include "io.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z)))
#define RL(x, y) (((x) << (y)) | ((x) >> (32 - (y)))) //x向左循环移y位
#define PP(x) (x<<24)|((x<<8)&0xff0000)|((x>>8)&0xff00)|(x>>24) //将x高低位互换,例如PP(aabbccdd)=ddccbbaa
#define FF(a, b, c, d, x, s, ac) a = b + (RL((a + F(b,c,d) + x + ac),s))
#define GG(a, b, c, d, x, s, ac) a = b + (RL((a + G(b,c,d) + x + ac),s))
#define HH(a, b, c, d, x, s, ac) a = b + (RL((a + H(b,c,d) + x + ac),s))
#define II(a, b, c, d, x, s, ac) a = b + (RL((a + I(b,c,d) + x + ac),s))
unsigned A, B, C, D, a, b, c, d, i, len, flen[2], x[16]; //i临时变量,len文件长,flen[2]为64位二进制表示的文件初始长度
char filename[200]; //文件名
FILE *fp;
void md5() //MD5核心算法,供64轮
{
a = A, b = B, c = C, d = D;
/**//* Round 1 */
FF(a, b, c, d, x[0], 7, 0xd76aa478); /**//* 1 */
FF(d, a, b, c, x[1], 12, 0xe8c7b756); /**//* 2 */
FF(c, d, a, b, x[2], 17, 0x242070db); /**//* 3 */
FF(b, c, d, a, x[3], 22, 0xc1bdceee); /**//* 4 */
FF(a, b, c, d, x[4], 7, 0xf57c0faf); /**//* 5 */
FF(d, a, b, c, x[5], 12, 0x4787c62a); /**//* 6 */
FF(c, d, a, b, x[6], 17, 0xa8304613); /**//* 7 */
FF(b, c, d, a, x[7], 22, 0xfd469501); /**//* 8 */
FF(a, b, c, d, x[8], 7, 0x698098d8); /**//* 9 */
FF(d, a, b, c, x[9], 12, 0x8b44f7af); /**//* 10 */
FF(c, d, a, b, x[10], 17, 0xffff5bb1); /**//* 11 */
FF(b, c, d, a, x[11], 22, 0x895cd7be); /**//* 12 */
FF(a, b, c, d, x[12], 7, 0x6b901122); /**//* 13 */
FF(d, a, b, c, x[13], 12, 0xfd987193); /**//* 14 */
FF(c, d, a, b, x[14], 17, 0xa679438e); /**//* 15 */
FF(b, c, d, a, x[15], 22, 0x49b40821); /**//* 16 */
/**//* Round 2 */
GG(a, b, c, d, x[1], 5, 0xf61e2562); /**//* 1