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

  • 相关阅读:
    谈谈服务限流算法的几种实现
    使用 MongoDB 存储日志数据
    MongoDB存储引擎选择
    下载一线视频
    spring-boot-starter-redis配置详解
    SpringBoot学习笔记(6) SpringBoot数据缓存Cache [Guava和Redis实现]
    Guava 源码分析(Cache 原理)
    分布式链路跟踪 Sleuth 与 Zipkin【Finchley 版】
    Dubbo x Cloud Native 服务架构长文总结(很全)
    区块链使用Java,以太坊 Ethereum, web3j, Spring Boot
  • 原文地址:https://www.cnblogs.com/besty/p/4210979.html
Copyright © 2020-2023  润新知