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下调用openssl函数进行md5

可以在freebsd/macos/linux下编译运行。gcc -o test test.c -lcrypto----test.c---#include #include int main{     ...
  • mounter625
  • mounter625
  • 2010年11月25日 22:03
  • 2750

linux下md5加密(使用openssl库C实现)

from: http://blog.csdn.net/shahongzhou/article/details/6307972 本文介绍linux c使用openssl/md5.h加密,有两种实现方法...
  • zsy19881226
  • zsy19881226
  • 2015年07月14日 16:28
  • 4129

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

作者:无脑仔的小明  出处:http://www.cnblogs.com/wunaozai/    我们以一个字符串为例,新建一个文件filename.txt,在文件内写入hello ,然后在Lin...
  • cassie_huang
  • cassie_huang
  • 2016年11月18日 09:56
  • 2715

使用Linux的MD5 API

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

MD5校验 for linux

linux下MD5校验方法
  • elaine_bao
  • elaine_bao
  • 2015年12月15日 11:04
  • 2549

md5加密 linux c/c++

http://blog.csdn.net/xyy410874116/article/details/6442172 注:在linux命令行中输入 echo -n "3" | md5sum 也可以输出...
  • helonSY
  • helonSY
  • 2012年06月12日 14:31
  • 2098

linux命令详解:md5sum命令

linux命令详解:md5sum命令 2013-11-05 21:11:18cnblogs.com-李文刚-点击数:31099 前言 ...
  • boshuzhang
  • boshuzhang
  • 2016年10月12日 12:15
  • 17243

linux下MD5计算

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

Linux下快速MD5检测

当下载了一大批的文件之后,需要检查下载下来的文件是否完整,校验MD5是一个不错的选择。 1、检测单个文件的MD5值: md5sum filename 2、如果目录下有md5.md5文件,该文件描...
  • aa453205586
  • aa453205586
  • 2017年05月25日 16:40
  • 361

Linux下使用md5sum计算和检验MD5码

CSDN GitHub linux下使用md5sum计算和检验MD5码 AderXCoding/system/md5sum 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际...
  • gatieme
  • gatieme
  • 2016年10月16日 22:16
  • 3761
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux md5函数使用
举报原因:
原因补充:

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