关闭

linux md5函数使用

标签: linuxhexdebubuntu加密lighttpd
2653人阅读 评论(1) 收藏 举报

测试环境: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 16
typedef unsigned char HASH[HASHLEN];
#define HASHHEXLEN 32
typedef 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); //将加密后的密文放到HA1
	CvtHex(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




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6110次
    • 积分:101
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:1篇
    • 译文:0篇
    • 评论:3条
    文章存档
    最新评论