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 在线编码解码

目录
相关文章
|
6月前
|
存储
base64图片是什么?原理、优缺点是什么?
base64图片是什么?原理、优缺点是什么?
385 0
|
XML JSON 前端开发
官方Lottie库能力增强实现
背景Lottie提供了播放复杂、酷炫动能力画,在移动端被广泛利用。在我们的应用中也被频繁、大量使用。它使用简单,仅需几行代码就能播放设计师设计的动画,帮助开发节省了时间成本。也正因为使用频繁,在使用过程中我们遇到了一些相关的问题。使用Lottie支持加载本地文件播放,也支持远程下载zip,json文件进行播放。这俩者在我们平时开发中都有使用到。本地播放本地播放比较简单。可以直接在xml实现,也可以
1191 0
官方Lottie库能力增强实现
|
2月前
|
存储 编解码 算法
超级好用的C++实用库之Base64编解码
超级好用的C++实用库之Base64编解码
129 2
|
1月前
|
开发框架 缓存 前端开发
electron-builder 解析:你了解其背后的构建原理吗?
本文首发于微信公众号“前端徐徐”,详细解析了 electron-builder 的工作原理。electron-builder 是一个专为整合前端项目与 Electron 应用的打包工具,负责管理依赖、生成配置文件及多平台构建。文章介绍了前端项目的构建流程、配置信息收集、依赖处理、asar 打包、附加资源准备、Electron 打包、代码签名、资源压缩、卸载程序生成、安装程序生成及最终安装包输出等环节。通过剖析 electron-builder 的原理,帮助开发者更好地理解和掌握跨端桌面应用的构建流程。
100 2
|
6月前
|
存储 SQL JavaScript
js常见的存储API以及应用场景?使用方式,各个优缺点?
【4月更文挑战第4天】JavaScript存储API包括`localStorage`、`sessionStorage`、`cookies`、`IndexedDB`和弃用的`Web SQL`。`localStorage`和`sessionStorage`用于页面数据存储,前者持久化,后者限当前会话。`cookies`适用于会话管理,但存储空间有限。`IndexedDB`适合大量结构化数据存储和查询。废弃的`Web SQL`曾提供关系型数据库功能。选择时需考虑数据性质、存储需求、安全性和兼容性。
115 2
|
6月前
|
存储 缓存 算法
base64图片是什么?原理是什么?优缺点是什么?
base64图片是什么?原理是什么?优缺点是什么?
400 0
|
6月前
|
JSON JavaScript 前端开发
Qt 5.14.2 深度解析:打造高效JSON处理利器
Qt 5.14.2 深度解析:打造高效JSON处理利器
434 0
|
11月前
|
存储 文字识别 C#
一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp
一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp
414 0
|
存储 XML 缓存
Base64图片是什么?原理是什么?优缺点是什么?
Base64图片是什么?原理是什么?优缺点是什么?
210 0
|
存储 缓存 算法
图片转为base64格式的优缺点分析
图片转为base64格式的优缺点分析
554 0