Openssl-Base64编解码

Base64概述和应用场景

  • 概述
    二进制转字符串
  • 应用场景
  • 邮件编码(base64)
  • xml或者json存储二进制内容
  • 网页传递数据URL
  • 数据库中以文本形式存放二进制数据
  • 可打印的比特币钱包地址
  • 比特币地址bech32

Base16的编码原理

=>16进制=>将二进制的数据转换为16进制进行转换

用四位表示一个字符,把一个字节切一半,大小扩大了一倍

实际上是进制转换。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include<iostream>
using namespace std;
static const char BASE16_ENC_TAB[] = "0123456789ABCDEF";
static const char BASE16_DEC_TAB[128] = {
-1, // 0
-1,-1,-1,-1,-1, -1,-1,-1,-1,-1, //1-10
-1,-1,-1,-1,-1, -1,-1,-1,-1,-1, //11-20
-1,-1,-1,-1,-1, -1,-1,-1,-1,-1, //21-30
-1,-1,-1,-1,-1, -1,-1,-1,-1,-1, //31-40
-1,-1,-1,-1,-1, -1,-1, 0, 1, 2, //41-50
3, 4, 5, 6, 7, 8, 9, -1,-1,-1, //51-60
-1,-1,-1,-1,10, 11,12,13,14,15, //61-70 'A'~'F'

};
int Base16Encode(const unsigned char* in, int size, char* out)
{

//base16转码后,空间扩大一倍,4位转成一个字符
// 1个字节转成两个字符
for (int i = 0; i < size; i++) {
//取出一个字节的高四位和第四位
char h = in[i] >> 4; //移位丢弃低位
char l = in[i] & 0x0F;// 去掉高位
out[i * 2] = BASE16_ENC_TAB[h];
out[i * 2 + 1] = BASE16_ENC_TAB[l];
}
return size * 2;
}
int Base16Decode(const string &in, unsigned char* out) {
//将两个字符拼成一个字节
for (int i = 0; i < in.size(); i += 2) {
unsigned char ch = in[i]; // 高位转换的字符 'B'->66: 10
unsigned char cl = in[i + 1]; // 低位转换的字符 '2'->50: 2
unsigned char h = BASE16_DEC_TAB[ch];
unsigned char l = BASE16_DEC_TAB[cl];

out[i / 2] = (h << 4) | l;
}
return in.size() / 2;
}
int main() {

cout << "Test Base16" << endl;
const unsigned char data[] = "测试Base16";
int len = sizeof(data);
char out1[1024] = { 0 };
unsigned char out2[1024] = { 0 };
int re = Base16Encode(data, len, out1);
cout << re << endl;
re = Base16Decode(out1, out2);
cout << re << ":" << out2 << endl;

return 0;
}

Base64(64进制)

Base64编码要求把3个8位字节(38=24)转化为4个6位的字节,
之后再6位的前面补两个0,*形成8位一个字节的形式,如果剩下的字符不足3个字节,则用0填充。输出字符使用 ‘=’ ,因此编码后输出的文本末尾可能会出现1个或2个 ‘=’


调用OpenSSL进行Base64编解码=>笔记Openssl-BIO接口

Base58编码

编码集不同,Base58编码集在Base64的字符集的基础上去掉了比较容易混淆的字符
Base58不含有Base64种的
0、O、l、I,以及’+’和’/‘


Openssl-Base64编解码
https://43.242.201.154/2025/07/24/Openssl-Base64编解码/
Author
Dong
Posted on
July 24, 2025
Licensed under