Linux下openssl提供了一系列哈希及加密的函数,如果调用openssl提供的MD5函数生成任意字符串的MD5呢?下面提供了一段代码实现Linux下c字符串生成md5的函数。

具体代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "stdio.h"
#include <string.h>
#include <stdlib.h>
#include <openssl/md5.h>
int  get_md5( char  *input, char  *output)
{
     char  password[1024*1024*5]={0};
     MD5_CTX x;
     int  i = 0, len;
     char  *out = NULL;
     unsigned  char  d[16];
     unsigned  char  tmp[128] = { 0 }; 
     strcpy (password,input);
     MD5_Init(&x);
     MD5_Update(&x, ( char  *)password,  strlen (password));
     MD5_Final(d, &x);
     out = ( char  *) malloc (35);
     memset (out, 0x00, 35);
     strcpy (out,  "$1$" );
    // printf("MD5(\"%s\") = ", password);
     for  (i = 0; i < 16; i++)
     {
         sprintf (out + (i*2),  "%02X" , d[i]);  // 转换为32位
     }
     out[32] = 0;
    // printf("%s\n", out);
     strcpy (output,out);
     free (out);
     return  0;
}

本文由www.169it.com搜集整理

另外提供两段代码供参考:

方法一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
#include<openssl/md5.h>
#include<string.h>
int  main(  int  argc,  char  **argv )
{
MD5_CTX ctx;
unsigned  char  *data= "123" ;
unsigned  char  md[16];
char  buf[33]={ '\0' };
char  tmp[3]={ '\0' };
int  i;
MD5_Init(&ctx);
MD5_Update(&ctx,data, strlen (data));
MD5_Final(md,&ctx);
for ( i=0; i<16; i++ ){
sprintf (tmp, "%02X" ,md[i]);
strcat (buf,tmp);
}
printf ( "%s\n" ,buf);
return  0;
}

输出:

202CB962AC59075B964B07152D234B70

方法二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
#include<openssl/md5.h>
#include<string.h>
int  main(  int  argc,  char  **argv )
{
unsigned  char  *data =  "123" ;
unsigned  char  md[16];
int  i;
char  tmp[3]={ '\0' },buf[33]={ '\0' };
MD5(data, strlen (data),md);
for  (i = 0; i < 16; i++){
sprintf (tmp, "%2.2x" ,md[i]);
strcat (buf,tmp);
}
printf ( "%s\n" ,buf);
return  0;
}

输出:

202cb962ac59075b964b07152d234b70

文章来源:Linux下c基于openssl生成MD5的函数

Linux下c基于openssl生成MD5的函数的更多相关文章

  1. 在Linux下如何使用openssl生成RSA公钥和私钥对

    在<Java实现RSA密钥对并在加解密.加签验签中应用的实例>中,我们有用Java代码生成RSA密钥对,其实在Linux操作系统中,用openssl也是很容易生成密钥对的. 一.如果在ub ...

  2. [转]Linux下用gcc/g++生成静态库和动态库(Z)

    Linux下用gcc/g++生成静态库和动态库(Z) 2012-07-24 16:45:10|  分类: linux |  标签:链接库  linux  g++  gcc  |举报|字号 订阅     ...

  3. linux下mysql基于mycat做主从复制和读写分离之基础篇

    Linux下mysql基于mycat实现主从复制和读写分离1.基础设施 两台虚拟机:172.20.79.232(主) 172.20.79.233(从) 1.1软件设施 mysql5.6.39 , my ...

  4. 查看Linux下*.a库文件中文件、函数、变量

    查看Linux下*.a库文件中文件.函数.变量等情况在Linux 下经常需要链接一些 *.a的库文件,那怎么查看这些*.a 中包 含哪些文件.函数.变量: 1. 查看文件:ar -t xxx.a 2. ...

  5. Linux下Makefile的automake生成全攻略--转

    http://www.yesky.com/120/1865620.shtml 作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下 ...

  6. Linux下Makefile的automake生成全攻略

    作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的M ...

  7. linux下用crunch工具生成密码

    crunch是一款linux下的压缩后仅仅38k的小程序,crunch程序在2004年及以前由email为的作者编写mimayin@aciiid.ath.cx,后续版本由bofh28@gmail.co ...

  8. Linux下三个密码生成工具

    http://code.csdn.net/news/2820879 想出一个难破解且容易记的密码对不是一件简单的事情.在我为电脑设定一个新密码,或者在线注册了一个新的账号,需要输入密码的时候,脑袋就一 ...

  9. 查看Linux下*.a库文件中文件、函数、变量等情况

    在Linux 下经常需要链接一些 *.a的库文件,那怎么查看这些*.a 中包 含哪些文件.函数.变量: 1. 查看文件:ar -t *.a 2. 查看函数.变里:nm *.a

随机推荐

  1. Hibernate查询效率对比

    查询已知表名的实体时推荐使用getHibernateTemplate().executeWithNativeSession() + SQLQuery方式. 以下测试使用JUnit进行,仅查询一次,查询 ...

  2. C#中反射的使用(How to use reflect in CSharp)(2)

    在上一篇里,我们叨逼了好多如何获取到程序集里的对象,但是对象有了,还不知道怎么调,OK,下面开始干这个对象: 首先,我们对上一篇的对象做了一些修改,以适应多种情况: using System; usi ...

  3. Realsense 提取彩色和深度视频流

    一.简要介绍 关于realsense的介绍,网上很多,这里不再赘述,sdk及相关文档可参考realsense SDK,也可参考开发人员专区. 运行代码之前,要确保你已经安装好了realsense的DC ...

  4. SQL Server 数据导入Mysql详细教程

  5. delphi 18 屏蔽和替换 右键菜单

    //屏蔽右键菜单procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;  var Handled: Boolean);begin  wi ...

  6. oracle if then else

    语句一: IF-THEN IF 条件 THEN 运行语句 END IF; 语句二: IF-THEN-ELSE IF 条件 THEN 运行语句 ELSE 运行其它语句 END IF; 语句三: IF-T ...

  7. Zend Studio / Ecliplse插件StartExplorer

    Install site.zip (quick and simple way) Locate zip file under site\target in Project Explorer, Start ...

  8. qsort函数、sort函数 (精心整理篇)

    先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的. 首先说一下, qsort qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有 ...

  9. 美H1B签证额满,硕士以上学位仍可申请

    美国公民与移民服务局6月1日宣布,2007会计年度的工作签证H1B名额已经用完,下年度的申请从明年4月1日开始.但在美国获得硕士以上学位的高学历者仍可申请. 据北美世界日报报道,美国移民律师协会对连续 ...

  10. [Java] 多个Map的性能比较(TreeMap、HashMap、ConcurrentSkipListMap)

    比较Java原生的 3种Map的效率. 1.  TreeMap 2.  HashMap 3.  ConcurrentSkipListMap 结果: 模拟150W以内海量数据的插入和查找,通过增加和查找 ...