• OpenSSL 使用 base64 编码/解码(liang19890820)


    关于 OpenSSL 的介绍及安装请参见:Windows 下编译 OpenSSL

    下面主要介绍有关 OpenSSL 使用 base64 编码/解码。

    编码/解码

    #include <openssl/evp.h>  
    #include <openssl/bio.h>  
    #include <openssl/buffer.h>    
    #include <string>  
    #include <iostream> 
    
    using namespace std;
    
    char * base64Encode(const char *buffer, int length, bool newLine);
    char * base64Decode(char *input, int length, bool newLine);
    
    int main(int argc, char* argv[])
    {
        bool newLine = false;
        string input = "Hello World!";
    
        char * encode = base64Encode(input.c_str(), input.length(), newLine);
        char * decode = base64Decode(encode, strlen(encode), newLine);
    
        cout << "Base64 Encoded : " << encode << endl;
        cout << "Base64 Decoded : " << decode << endl;
    
        cin.get();
    }
    
    // base64 编码
    char * base64Encode(const char *buffer, int length, bool newLine)
    {
        BIO *bmem = NULL;
        BIO *b64 = NULL;
        BUF_MEM *bptr;
    
        b64 = BIO_new(BIO_f_base64());
        if (!newLine) {
            BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
        }
        bmem = BIO_new(BIO_s_mem());
        b64 = BIO_push(b64, bmem);
        BIO_write(b64, buffer, length);
        BIO_flush(b64);
        BIO_get_mem_ptr(b64, &bptr);
        BIO_set_close(b64, BIO_NOCLOSE);
    
        char *buff = (char *)malloc(bptr->length + 1);
        memcpy(buff, bptr->data, bptr->length);
        buff[bptr->length] = 0;
        BIO_free_all(b64);
    
        return buff;
    }
    
    // base64 解码
    char * base64Decode(char *input, int length, bool newLine)
    {
        BIO *b64 = NULL;
        BIO *bmem = NULL;
        char *buffer = (char *)malloc(length);
        memset(buffer, 0, length);
        b64 = BIO_new(BIO_f_base64());
        if (!newLine) {
            BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
        }
        bmem = BIO_new_mem_buf(input, length);
        bmem = BIO_push(b64, bmem);
        BIO_read(bmem, buffer, length);
        BIO_free_all(bmem);
    
        return buffer;
    }

    输出如下所示:

    Base64 Encoded : SGVsbG8gV29ybGQh 
    Base64 Decoded : Hello World!

    更多参考

    http://blog.csdn.net/liang19890820/article/details/52948306

  • 相关阅读:
    MFC 解析xml文件
    数字图像处理-----主成成分分析PCA
    C++设计模式——建造者模式
    总结的文章--未读
    八大排序算法
    C++读取、旋转和保存bmp图像文件编程实现
    数字图像处理-----直方图均衡化
    数字图像处理------中值滤波
    matlab图像基础知识
    MFC最大化显示任务栏
  • 原文地址:https://www.cnblogs.com/findumars/p/8076288.html
Copyright © 2020-2023  润新知