⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 md5main.cpp

📁 “网络安全技术实践与代码详解”实例代码
💻 CPP
字号:
#include "md5.h"
#include <math.h>
#include <stdio.h>
#include <string.h>

#define DIGEST_LEN 16 // 摘要长度
#define HASH_HEX_LEN 1+2*DIGEST_LEN // Hash值长度

// 根据MD5算计算字符串的Hash值
void MD5_Hash(char *hash, char *input)
{
	int i;
    int status = 0;
	md5_state_t state;
	md5_byte_t digest[DIGEST_LEN];
    
	int di;
	// 初始化算法
	md5_init(&state);
	// 添加校验字符串
	md5_append(&state, (const md5_byte_t *)input, strlen(input));
	// 完成MD5算法,输出摘要长度
	md5_finish(&state, digest);

	// 转换成Hash值
	for (di = 0; di < 16; ++di)
	{
	    sprintf(hash + di * 2, "%02x", digest[di]);
	}
}

// 校验字符串MD5值
bool MD5_Check(char *hash, char *input)
{
	char input_str_hash[HASH_HEX_LEN];
	// 计算输入字符串的Hash值
	MD5_Hash(input_str_hash,input);

	// 比较输入的Hash值与计算出的Hash值是否相同
	if(strcmp(hash,input_str_hash))
	{
		return false; // 不同的Hash值
	}
	else
	{
		return true; // 相同的Hash值
	}

}
int main(int argc, char *argv[])
{
	// 为了演示方便,使用字符串代表文件
	char file[]="Welcome to MD5 World!";
	char fake_file[]="Welcome to MD5 World.";
	char hash[HASH_HEX_LEN];
	// 计算文件file的Hash值
	MD5_Hash(hash,file);
    // 根据Hash值校验文件file
	bool real_ret=MD5_Check(hash,file);
	printf("\n\n文件1 : %s\n\n",file);
	printf("文件1的Hash值 : %s\n\n",hash);


	printf("如果文件1被改为 %s\n\n",fake_file);

	// 使用Hash值校验文件fake_file
	if(!MD5_Check(hash,fake_file))
	{
		printf("经过校验,文件1被改动了!!!\n\n");
	}
	else
	{
		printf("经过校验,文件1未被修改!!!\n\n");

	}
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -