Linux下c基于openssl生成MD5的函数

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的函数

时间: 2024-10-09 11:27:59

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

linux下PHP安装openssl扩展

很多时候都会用到openssl组件,下面就介绍一下linux下php安装openssl扩展: 安装openssl组件,一般php安装目录中都有许多扩展组件的安装包,当然也包括openssl,例如我的php安装目录是/data/php-5.4.32,那么openssl组件的安装目录则为/data/php-5.4.32/ext/openssl,然后执行以下操作 (1) cd /data/php-5.4.32/ext/openssl (2) mv config0.m4 config.m4 (3) /d

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

Linux下用gcc/g++生成静态库和动态库(Z) 2012-07-24 16:45:10|  分类: linux |  标签:链接库  linux  g++  gcc  |举报|字号 订阅 在 linux 下,库文件一般放在 /usr/lib 和 /lib 下, 静态库的名字一般为 libxxxx.a ,其中 xxxx 是该 lib 的名称 动态库的名字一般为 libxxxx.so.major.minor , xxxx 是该 lib 的名称, major 是主版本号, minor 是副版本号

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

Linux下mysql基于mycat实现主从复制和读写分离1.基础设施 两台虚拟机:172.20.79.232(主) 172.20.79.233(从) 1.1软件设施 mysql5.6.39 , mycat1.6-RELEASE jdk1.7及其以上版本2.实现步骤一(mycat实现读写分离) 1.首先在两台服务器安装mysql 1.下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rp

Linux下gcc编译控制动态库导出函数小结

Linux下gcc编译控制动态库导出函数小结 来源 https://www.cnblogs.com/lidabo/p/5703890.html 根据说明文档“How To Write Shared Libraries"介绍, 有四种方法: 1. 在方法声明定义时,加修饰:__attribute__((visibility("hidden"))) 就是说将不公开的函数都加上这个属性,没加的就是可见的 2. gcc 在链接时设置 -fvisibility=hidden,则不加 v

Linux下Makefile的automake生成全攻略

作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了. 在本文中,将给大家介绍如何使用 autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程序一样,只要使用“./configure”,“make”,“make instal”就可以把程序安装到Linux

Linux下,基于EETI触屏控制器的触屏失灵解决方法

Linux(kernel 3.2.x)下,基于EETI触屏控制器.USB触控线的触屏应用,发现将USB触控线拔掉再插上后,触屏失灵,此时触屏驱动 eGTouhD的CPU急剧飙升,占用率在90%以上. 查看触屏设备,发现USB触控线拔掉后,/dev/hidraw仍然存在,没有及时remove,此时再插上USB触控线,会在/dev下出现hidraw0的设备.因此判断故障点出在这里:USB触控线拔掉后,触控设备实际上已不存在,但是/dev/hidraw的存在使eGTouhD认为触控设备还存在,一直在读

Linux下动态库的生成和使用

一.动态库的基本概念 1. 动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态链接库是目标文件的集合,目标文件在动态链接库中的组织方式是按照特殊方式形成的.库中函数和变量的地址是相对地址,不是绝对地址,其真实地址在调用动态库的程序加载时形成. 2. 动态链接库的名称有别名(soname), 真名(realname)和链接名(linker name).别名由一个前缀lib,然后是库的名字,再加上一个后缀“.so”构成.真名是动态链接库真实名称,一般总

Linux 下动态链接库 *.so(生成、调用)

[摘要]动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,这里做个笔记. 1.动态库的编译 下面通过一个例子来介绍如何生成一个动态库.这里有一个头文件:so_test.h,三个.c文件:test_a.c.test_b.c.test_c.c,我们将这几个文件编译成一个动态库:libtest.so. //so_test.h: #include "stdio.h" void test_a(); void test_b(); void te

摘要算法之MD5介绍及OpenSSL中MD5常用函数使用举例

MD5(Message-DigestAlgorithm 5)是计算机中广泛使用的杂凑算法之一.主要可以实现将数据运算后转换为一串固定值,其前身主要有MD2.MD3和MD4算法.MD2算法在1989年由Rivest设计开发,后来由Rogier和Chauvaud发现如果忽略了校验将和MD2产生冲突.为了加强算法的安全性,Rivest在1990年又开发出MD4算法,随后由Denboer和Bosselaers以及其他人很快的发现了攻击MD4版本中第一步和第三步的漏洞,于是MD4就此被淘汰了.1991年R