www.pudn.com > MD5.rar > md5main.cpp
#include "md5.h" #include#include #include #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; }