MD5 校验测试

测试代码语言 :

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
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值