linux md5函数使用

来源:互联网 发布:mysql统计每小时记录 编辑:程序博客网 时间:2024/06/02 07:16

测试环境:ubuntu 8.04

简单介绍MD5函数的使用。并用MD5函数写一个简单的密码比较示例。

md5.h在ubuntu中的位置:/usr/include/openssl/md5.h,此文件定义了md5的结构体,声明了API函数。

密码认证示例参考lighttpd源码的HTTP认证模块。采用的密码为password,它的md5加密后的密文,可以采用第三方工具查看。这里我已经用第三方工具得到了它的密文,为: 5f4dcc3b5aa765d61d8327deb882cf99

/*结构体*/typedef struct MD5state_st {MD5_LONG A,B,C,D;MD5_LONG Nl,Nh;MD5_LONG data[MD5_LBLO];unsigned int num;} MD5_CTX;
/*API*/int MD5_Init(MD5_CTX *c); //初始化一个MD5_CTX结构体int MD5_Update(MD5_CTX *c, const void *data, size_t len); //对data数据进行计算int MD5_Final(unsigned char *md, MD5_CTX *c); //将计算结果拷贝到md

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <openssl/md5.h>#define HASHLEN 16typedef unsigned char HASH[HASHLEN];#define HASHHEXLEN 32typedef char HASHHEX[HASHHEXLEN+1];static const char hex_chars[] = "0123456789abcdef";char int2hex(char c) {return hex_chars[(c & 0x0F)];}void CvtHex(HASH Bin, HASHHEX Hex) {unsigned short i;for (i = 0; i < HASHLEN; i++) {Hex[i*2] = int2hex((Bin[i] >> 4) & 0xf);Hex[i*2+1] = int2hex(Bin[i] & 0xf);}Hex[HASHHEXLEN] = '\0';}/** 密码比较,相等返回0,不等返回-1*/static int password_compare(char *password, const char *pw){MD5_CTX Md5Ctx;char md5_pw[256];HASH HA1;MD5_Init(&Md5Ctx);//初始化MD5_Update(&Md5Ctx, (unsigned char *)password, strlen(password)); //md5加密MD5_Final(HA1, &Md5Ctx); //将加密后的密文放到HA1CvtHex(HA1, md5_pw); //将HA1转换为字符串存储printf("md5pw = %s\n", md5_pw);printf("pw = %s\n", pw);if (0 == strcmp(pw, md5_pw)){return 0;}else {return -1;}return 0;}int main(int argc, char **argv){int result;char pw[256] = "5f4dcc3b5aa765d61d8327deb882cf99";if ((result = password_compare("password", pw)) < 0) {printf("password not equal \n");return -1;}else printf("password equal\n");return 0;}

编译:gcc -o md5 md5.c -lssl

运行:./md5
md5pw = 5f4dcc3b5aa765d61d8327deb882cf99
pw = 5f4dcc3b5aa765d61d8327deb882cf99

password equal




原创粉丝点击