?? 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 + -