【常见开源库的二次开发】基于openssl的加密与解密——Base的编解码(二进制转ascll)(二)

07-16 1215阅读

【常见开源库的二次开发】基于openssl的加密与解密——Base的编解码(二进制转ascll)(二)

目录:

目录:

一、 Base64概述和应用场景

1.1 概述

1.2 应用场景

二、Base16

2.1 Base16编码

2.2 Base16编解码

三、Base64

四、OpenSSL BIO接☐

4.1 Filter BIOs:

4.2 Source/Sink BIOs:

4.3 应用场景: 

4.4 具体使用:

4.5 进行BIO编码:

4.6进行BIO解密:

1.Base64编码(Base64Encode函数)

2. Base64解码(Base64Decode`函数)

3. main函数


一、 Base64概述和应用场景

1.1 概述

Base64是一种编码方式,用于将二进制数据转换为ASCII字符串,以便在只支持文本的媒体上进行存储和传输。它不是一种加密算法,而是一种数据编码技术。Base64编码是一种简单而有效的数据编码方式,它允许二进制数据在文本环境中安全地传输和存储。尽管它不提供安全性(数据在传输过程中可以被读取),但它确保了数据的完整性和可移植性。

1.2 应用场景

邮件编码(base64)

xml或者json存储二进制内容

网页传递数据URL

数据库中以文本形式存放二进制数据

可打印的比特币钱包地址base58 Check(hash校验)

比特币地址bech32(base32)

二、Base16

2.1 Base16编码

Base16是一种编码方法,它使用16个可打印的ASCII字符来表示二进制数据。这些字符包括数字0到9和字母A到F。每个字符代表4个二进制位,因此Base16有时也称为十六进制编码。

【常见开源库的二次开发】基于openssl的加密与解密——Base的编解码(二进制转ascll)(二)

在Base16编码过程中,首先将原始数据(如文本或文件)转换成二进制形式。对于ASCII编码字符,这一步直接涉及将每个字符转换为其对应的8位二进制值。对于UTF-8或其他编码,可能涉及更复杂的转换过程。 

接下来,将得到的二进制串按照每4位一组进行切分。由于每组4位可以对应一个0到15之间的十进制数,这个数可以直接映射到上述提到的16个字符之一。例如,二进制组0101对应十进制数5,按Base16编码转换成字符5;二进制组1001对应十进制数9,转换成字符9;二进制组1010对应十进制数10,转换成字符A,依此类推。

【常见开源库的二次开发】基于openssl的加密与解密——Base的编解码(二进制转ascll)(二)

由于Base16使用4位二进制表示一个字符,一个字节(8位)被编码为两个Base16字符。因此,Base16编码后的数据大小是原始数据大小的两倍。

#include  
using  namespace  std;
//  定义一个静态的常量字符数组,用于Base16编码的字符映射表
static  const  char  BASE16_ENC_TAB[] = "123456789ABCDEF";
//  函数:将输入的原始数据按照Base16编码规则编码到输出字符串中
//  参数:in  -  指向原始数据的指针;size  -  原始数据的字节数;out  -  指向输出编码字符串的指针
//  返回值:编码后的字符串长度,即原始数据长度的两倍
int  Base16Encode(const  unsigned  char* in, int  size, char* out)
{
    //  遍历原始数据的每个字节
    for (int i = 0; i > 4;  //  例如:二进制1000  0001通过移位变为0000  1000
        //  将当前字节的低四位与0x0F进行与操作,得到低四位的值
        char  l = in[i] & 0x0F;  //  例如:二进制0000  1111与0x0F与操作后得到0000  0001
        //  根据高四位的值,在编码表中查找对应的字符,并存入输出字符串
        out[i * 2] = BASE16_ENC_TAB[h];  //  映射高四位到编码表对应的字符
        //  根据低四位的值,在编码表中查找对应的字符,并存入输出字符串
        out[i * 2 + 1] = BASE16_ENC_TAB[l];  //  映射低四位到编码表对应的字符
    }
    //  返回编码后的字符串长度,即原始数据长度的两倍
    return  size * 2;
}
int  main(int  argc, char* argv[])
{
    cout 
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]