linux md5 c函数,linuxC编程 生成字符串的MD5校验码

一、C编程   在网络间进行通信时我们都需要对我们发送的数据进行校验的,一般情况下,大多数都是使用MD5来进行校验。也就是当我们在发送数据时同时把他的MD5校验码一起发过去,当接受到这些数据时,他先调用自己的MD5校验方法来生成刚接收到的数据的校验码,然后和我们发送给他的MD5校验码进行比较看看是否相同,来确定是否需要重新发送数据。这只是自己的个人观点不代表权威说法。先前在网上查过Linux中如何调用关于MD5的函数,也也系统中的找过源代码,但是结果就是没任何结果。有许多博文中写到了调用ssl中关于MD5的函数,仔细看了看方法还算简单,这样就不用自己去写代码实现MD5的算法了。那就和大家一起分享自己的收获吧!!

首先我们要先安装ssl库,如果你的系统中没有安装的话就应该进行这一步操作,命令如下:

sudo

apt-get install openssl libssl-dev

这里跟大家说一声我用的系统是Ubuntu

10.10,如果你们用的不是这个系统的话,也可以先试一下这条命令,基本上现在的系统大都是采用deb,我想应该没什么差别吧!

我们的基本工作做好之后,那我们就看看下面的代码是怎么用这些函数的吧!

代码如下:

//md5test.c

#include

#include

#include

#include

int main(int argc,

char *argv[])

{

MD5_CTX ctx;

unsigned char md[16];

char

md5[33] = {'\0'};

char tmp[3] = {'\0'};

int i;

if(argc

< 2)

{

printf("Using : %s

\n",argv[0]);

exit(1);

}

//int

MD5_Init(MD5_CTX *c);

if(MD5_Init(&ctx) ==0 )

//初始化一个MD5_CTX这样的结构体

{

printf("Error!MD5_Init()

Error!\n");

exit(1);

}

// int MD5_Update(MD5_CTX *c,

const void *data, unsigned long len);

if(MD5_Update(&ctx, (unsigned

char*)argv[1], strlen(argv[1])) == 0 )

//更新这块区域,防止引用非法数据(你们可以去看man手册,本人英语不太好)

{

printf("Error!

MD5_Update() Error!\n");

exit(1);

}

//int

MD5_Final(unsigned char *md, MD5_CTX *c);

if(MD5_Final(md, &ctx) ==

0) //最后把ctx中的数据按照MD5算法生成16位的MD5码,存放到md中

{

printf("Error!

MD5_Final() Error!\n");

exit(1);

}

for(i=0;

i< 16; i++)

{

sprintf(tmp, "%02X", md[i]);

strcat(md5, tmp);

}

printf("The String is [ %s ]\nThe String

MD5 is [ %s ]\n",argv[1],md5);

return

0;

}

编译执行:

FreeOS@FreeOS:~/source/test$ gcc md5test.c -o md5test

-Wall -lssl

FreeOS@FreeOS:~/source/test$ ./md5test hello

The String is [

hello ]

The String MD5 is [ 5D41402ABC4B2A76B9719D911017C592

]

提示:在我们编译时一定要加上-lssl,否则会报没有这些MD5相应的函数。你就把光标定位到相应函数处按shift+k键就可跳到相应的函数的man

手册中了。

这里的方法只是一种,当时在网上查资料的时候好像还有一种方法,如果自己没记错的话应该是在MD5的输出格式上面,如果不是的话那就只能说明自己的记忆力不好,嘿嘿!!

注:上面的编译在Ubuntu

10.10上是可以的,今天刚升级到了11.04再次编译时就报出错,于是试着用下面的方法进行编译:

gcc md5test.c -o md5test

-Wall -lcrypto

二、shell

echo -n "字符串" | md5sum| awk '{print $1}'

1 echo默认是带换行符做结尾的2 echo -n 可以去掉换行符

3 printf是没有换行符结尾的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值