📄 md5main.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 + -