zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    查看jvm的cg情况
    什么是json
    httpclient工具类
    mysql 优化思路(1)
    mysql存取日期出问题
    springboot和tomcat jar包冲突
    递归
    如何去理解return?
    js BOM判断当前窗口是否最顶层。
    个人笔记,关于ajax 如果没有请求成功不允许再次请求的方法。
  • 原文地址:https://www.cnblogs.com/findumars/p/8076288.html
Copyright © 2011-2022 走看看