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

2024-07-16 1217阅读

【常见开源库的二次开发】基于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购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]