c/c++密码存储加密例子

在编写各种客户端的过程中需要在配置文件中存储密码,但是密码肯定需要加密,当读取配置文件密码时又需要解密,下面代码就通过openssl库在linux下实现了这两个加解密的功能。

之前是使用《c语言通过openssl aes对称加解密和base64编解码将密码存储成密文》

c语言通过openssl aes对称加解密和base64编解码将密码存储成密文_GT19930910的博客-CSDN博客

这篇文章来实现的,后来发现这个加解密过程对于有些字符串来说有问题,会导致加解密之后出来的字符串和原字符串不一样,很有可能是因为编码之后16进制字符中有特殊字符所以导致base64编解码失败,所以下面给大家又展现一版现在咱们项目里面一直在用的接口,完成编解码功能。


/*  Created by verycloud on 2020/09/18.
    Copyright © 2019 verycloud. All rights reserved.

    build in cmdline
    gcc -g -O0 main.c -lssl -lcrypto
*/
#include 
#include 
#include 
#include 
/*
 *  @parme in  str end by '\0'
 *  @parme out buf size >= 33
 */
void make_md5(const char* in,char* out)
{
    int inSize = (int)strlen(in);

    unsigned char buf[16];
    MD5((const unsigned char*)in, inSize, (unsigned char*)buf);

    char tmp[3] = {0};
    for (int i = 0; i < 16; i++) {
        sprintf(tmp, "%02x", (int)buf[i]);
        strcat(out,tmp);
    }
}

void make_base64_2K(char s[])
{
    unsigned char buf[2048];
    int len = EVP_EncodeBlock((unsigned char*)buf, (const unsigned char*)s, strlen(s));
    strncpy(s, buf, len);
}

void m_append(char s[], char tmp[], int len)
{
    if(s[0] == 0)
    {
        strncpy(s, tmp, len);
    }else
    {
        strncat(s, tmp, len);
    }
}

int string_find(char tmp[], char c)
{
    int i;
    for(i=0; i

 最后欢迎大家一起学习一些其他c/c++技术:

(21条消息) 收集一些c/c++技术_GT19930910的博客-CSDN博客

你可能感兴趣的:(c/c++应用编程,c++,c语言,linux)