linux md5函数使用

原创 2012年03月23日 15:05:42

测试环境: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




相关文章推荐

Linux下C语言使用openssl库进行MD5校验

作者:无脑仔的小明  出处:http://www.cnblogs.com/wunaozai/    我们以一个字符串为例,新建一个文件filename.txt,在文件内写入hello ,然后在Lin...

Linux下C语言计算文件的md5值(长度32)

google了好久都没有找到合适的,其实我只需要一个函数,能计算文件的 md5 值就好, 后来找到了 md5.h 和 md5.c 的源文件,仿照别人的封装了个函数(他那个有问题,和 md5sum 计算...

linux下调用openssl实现获得文件MD5值

在网上找了好久都找不到一个简洁完整的用代码实现计算文件MD5值得示例,所以牛刀小试自己写一个; 使用库前,可能需要预先安装openssl的RPM包。 使用的openssl库所调用的函数有三个(可以在...

linux md5 加密字符串和文件方法

MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度...

linux命令详解:md5sum命令

linux命令详解:md5sum命令 2013-11-05 21:11:18cnblogs.com-李文刚-点击数:31099 前言 ...

MD5校验 for linux

linux下MD5校验方法

linux下MD5计算

一,Open Terminal:        md5sum file1 > file2        将file1的md5值保存到file2中二、code:        include      ...
  • yhtoo
  • yhtoo
  • 2011年02月17日 08:34
  • 3826

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

使用Linux的MD5 API

使用Linux的MD5 API最近项目中需要用到md5校验。学习一下openssl中的md5的API,感觉使用很方便,记上来,以做备忘之需。openssl/md5.h:[code]#define MD...

linux md5 加密字符串和文件方法

MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux md5函数使用
举报原因:
原因补充:

(最多只允许输入30个字)