Base64是什么、应用场景、开源库(libb64)使用

简介: Base64是什么、应用场景、开源库(libb64)使用

1. Base64是什么

1.1 概念:

Base64是一种 “将二进制转为64个可打印字符” 的编码方式。
  • Base64是网络上最常见的用于传输8Bit字节码的编码方式
  • 一种基于64个可打印字符来表示二进制数据的方法
  • Base64编码原理是从二进制可打印字符的过程
  • 采用Base64编码具有不可读性,需要解码后才能阅读

1.2 编码原理

标准的Base64协议使用了“A-Z、a-z、0-9、+、/” 64个可打印字符,然后把需要转换的二进制数据按照6bit位为一组(二进制数 000000 表示十进制的0,二进制数 111111 表示十进制的63),这样一组6bit位的二进制数就表示了 Base64 协议规定的字符的其中一个,进而把二进制数据转换成 Base64 协议字符组成的字符串。

注意:如果二进制数按6bit位分组时,出现位数不足的情况,则用 00 (两个0) 补齐,每增加 00 (两个0),就往 Base64 字符串加一个”=“。

1.2.1 标准Base64协议的字符

static const char b64_table[] = {
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
  'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
  'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
  'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
  'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
  'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
  'w', 'x', 'y', 'z', '0', '1', '2', '3',
  '4', '5', '6', '7', '8', '9', '+', '/'
}

1.2.2 将二进制数按6bit位为一组分成若干组,每组表示一个索引,在Base64字符表找对应字符

字符文本    :  'A'      'B'     'C'
ASSII码    :   65       66      67
二进制数    :01000001 01000010 01000011
分组之后    :010000 010100 001001 000011
Base64索引  :  16     20     9      3
Base64编码  :  'Q'    'U'    'J'    'D'

1.2.3 出现位数不足的情况,则用 00 (两个0) 补齐,每增加 00 (两个0),就往 Base64 字符串加一个“=”,下面以字符A为例,A的ASSII码为65,二进制为01000001,按6bit分组后,加了4个0,所以最后得到的Base编码加多两个'='

字符文本    :  'A'     
ASSII码    :   65    
二进制数    :01000001 
分组增加4个0 :010000 010000
Base64索引  :  16     16
Base64编码  :  'Q'    'Q'   '='    '='

2.应用场景

任何需要将二进制数据转为可读字符的场景。

2.1 传输:需要将一组二进制数以字符串的方式去传输。

  • 例如需要将一个1024字节的的指纹数据,按照json的形式传给服务器,因为json传输内容大多需要字符串,所以可以用Base64编码把这组二进制数据转为Base64编码数据进行传输。

2.2 保存:需要将数据转为字符串保存时。

3.Base64相关开源库

3.1 libb64

libb64是ANSI C例程的库,用于将数据快速编码/解码为base64编码格式。 包括C++封装程序,以及用于独立编码和解码可执行文件的源代码。

3.1.1 libb64使用

在Linux下解压

$ unzip libb64-1.2.1.zip 

编译libb64.a

$ cd libb64-1.2.1/src/
$ make clean
rm -f *.exe* *.o libb64.a *.bak *~
$ make
cc -O3 -Werror -pedantic -I../include   -c -o cencode.o cencode.c
cc -O3 -Werror -pedantic -I../include   -c -o cdecode.o cdecode.c
ar rv libb64.a cencode.o cdecode.o
ar: creating libb64.a
a - cencode.o
a - cdecode.o

b64.c

参考资料:

一篇文章彻底弄懂Base64编码原理

Base64 在线编码解码

目录
相关文章
|
存储 算法 JavaScript
base64编码是啥?
base64编码是啥?
351 0
|
Web App开发 网络协议 Linux
Linux C/C++ 开发(学习笔记十 ):实现http请求器(TCP客户端)
Linux C/C++ 开发(学习笔记十 ):实现http请求器(TCP客户端)
975 0
|
人工智能 JSON 算法
Qwen2.5-Coder 系列模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
阿里云的人工智能平台 PAI,作为一站式、 AI Native 的大模型与 AIGC 工程平台,为开发者和企业客户提供了 Qwen2.5-Coder 系列模型的全链路最佳实践。本文以Qwen2.5-Coder-32B为例,详细介绍在 PAI-QuickStart 完成 Qwen2.5-Coder 的训练、评测和快速部署。
Qwen2.5-Coder 系列模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
|
NoSQL 前端开发 Linux
【C++】使用VS2022开发可以在线远程编译部署的C++程序
c++类库源码以及其他有关资源。站点是英文的,英文不好的话可以谷歌浏览器在线翻译。http://www.cplusplus.com/
1478 0
【C++】使用VS2022开发可以在线远程编译部署的C++程序
|
Linux C语言 Python
Linux C-完美解决segmentation fault (core dumped)
在Linux下进行C语言编程时,遇到一个错误,网上说的都很复杂,看都看不懂,其实就是你对指针进行直接操作之前,没有对它进行分配地址空间。 所以在运行的时候,它不知道在那里操作(比如赋值,取值),所以才报了这个错误。
44928 0
|
编解码 人工智能 安全
去 “马赛克” 工具横空出世, 一秒还原!
如果你认为将密码或其他私密文本数据像素化就能保护它们不被窥见,那你真是太天真了,你的信息并没有你想象的那么安全。像素化(也称为马赛克)是一种常用的手段,可以大幅降低图像敏感区域的分辨率来隐藏信息。
994 0
去 “马赛克” 工具横空出世, 一秒还原!
|
Java Android开发 C++
Android C++系列:通过 JNI 访问 Java 字段和方法调用
有了之前那些基础,就可以实现 Java 和 Native 的相互调用了,在 Native 中去访问 Java 类的字段并调用相应的方法。
429 0
|
小程序 Android开发 数据安全/隐私保护
孔夫子旧书网接口:实现输入ISBN获取图书信息
背景 由于粉丝看到了我的一篇文章《别找了,小程序实现isbn扫码获取图书信息2022最新可用(保姆级教程内附接口)》 私信我说,能不能对接下孔夫子旧书网的接口,经过抓包发现很多加密数据拿不下来,于是换了个思路,最终搞定,这里简单记录下,不发操作,免得又被和谐 大家想学的可以参考:《抓包部分软件时无网络+过代理检测 解决办法 安卓黄鸟httpcanary+vmos》、《记一次视频抓包m3u8解密过程》、《滇医通九价脚本》 成品演示: https://*****/v2/kfz.php?isbn=9787010
913 0
孔夫子旧书网接口:实现输入ISBN获取图书信息
|
28天前
|
人工智能 JSON 安全
“龙虾”OpenClaw保姆级教程:阿里云/本地部署+百炼API配置+AI Coding可控落地实战+避坑指南
2026年,OpenClaw(俗称“龙虾”,曾用名Clawdbot)的爆火并非偶然,它精准打通了聊天工具、桌面环境与技能系统的壁垒,让用户通过自然对话即可驱动电脑持续执行任务,成为自媒体从业者、独立开发者和企业团队的高效工具。但热潮背后,争议与挑战并存:它并非“零门槛”产品,需具备JSON配置、排障与Skill优化能力;AI Coding的核心痛点不是“生成代码”,而是“可控落地”;团队协作中,效率与规范的平衡更是关键。本文将从OpenClaw核心价值与能力边界、阿里云+本地多系统部署步骤、AI Coding可控落地方案(SPEC驱动)、阿里云百炼Coding Plan API配置四大核心板块
1230 5
|
jenkins 持续交付
Jenkins 服务重启方法
Jenkins 服务重启方法
2309 0
Jenkins 服务重启方法

热门文章

最新文章

下一篇
开通oss服务