当前位置:网站首页>Base64编码原理
Base64编码原理
2022-08-04 05:35:00 【阿里巴巴首席技术官】
一、Base64是什么
base 64、base 32、base 16 编码建议标准 https://www.ietf.org/rfc/rfc4648.txt
Base64是基于64种字符的编码算法,即将数据使用64种字符表示,编码后的Base64字符串长度 通常为原来的3-4倍。(补充:Base32就是32个字符,Base16就是16个字符,为了能在Http get 参数方式传输,有了变体URLBase64,主要是将符号=和+换成了其他字符,因为这些字符在url有特殊的意义,不能直接,所以做了替换)
即如下表,例如数字0(十进制)表示为A。即单表替换密码:明文的一个字符用另一个字符一一对应。所以Base64是可逆的,逆推过程后面介绍。
Base64的产生
当初发送电子邮件时,由于历史原因,电子邮件内容仅仅支持ascii码范围,所以如果发送其他文字,系统将会显示乱码。后来,将邮件内容使用Base64编码后再发送,接收方再使用Base64解码即可正常显示,因为Base64的64个字符都在ascii码以内,可看下图。
这里还有个问题,那么64以外到底是如何编码的呢?且看后面讲解。
二、编码原理
算法步骤
1. 得到编码数据的二进制码
如果编码数据为英文:将英文参照ascii码表转换为对应的数字表示形式,再将数字转为二进制
如果编码数据为中文:将中文使用unicode UTF8编码得到二进制
2. 将3个8位的二进制码为一组
3. 转换为4个6位二进制码为一组(不足6位补0,不足4个 最后追加补位符)
4. 对每组二进制码添加2位高位0
5. 将每组转换为十进制
6. 将每组的十进制转换为Base64字符表中对应的字符
三、示例:英文字符 A 的编码过程
此过程建议不断对照上面的步骤来回理解
首先字符A在ascii表中对应的数字是十进制的65, 65的二进制是 0100 0001
第二步 将3个8位的二进制码为一组
0100 0001 长度是8位,3个8位现在只有一个,就只分了一组
第三步 转换为4个6位二进制码为一组(不足6位补0,不足4个 最后追加补位符)
将上步转换为010000 和 01 由于第二个只有两位所以需要补0补到6位
所以到这步得到 010000 和 010000 现在只有两组,需要补位到4组,组的补位就用符号=
所以就是 010000 010000 = = (补两组,就是两个=符号)
第四步 对每组二进制码添加2位高位0
得到 00010000 00010000 = = 注意红色,在每组前面补了两个0
第五步 将每组转换为十进制
00010000 00010000 = = 转换为十进制 就是 16 16 = =
这个可以用计算器算
第六步 将每组的十进制转换为Base64字符表中对应的字符
将上步16 16 = = 开始对应字符进行编码。 所以得到结果为 QQ==
四、示例:中文字符 我 的编码过程
第一步获得unicode utf8编码二进制。这步就直接用代码得到
具体这二进制是怎么来的,就自己看源码吧,我没有深究
第二步 将3个8位的二进制码为一组
开始进行分组 3 * 8 = 24 ,相当于24位为一组
111001101000100010010001 刚好一组
第三步 转换为4个6位二进制码为一组(不足6位补0,不足4个 最后追加补位符)
111001 101000 100010 010001
第四步 对每组二进制码添加2位高位0
得到 00111001 00101000 00100010 00010001 注意紫色,在每组前面补了两个0
第五步 将每组转换为十进制
00111001 00101000 00100010 00010001 转换为十进制
就是 57 40 34 17
这个可以用计算器算
第六步 将每组的十进制转换为Base64字符表中对应的字符
将上步 57 40 34 17 开始对应字符进行编码。 所以得到结果为 5oiR
五、Base64的应用
base64不能算作加密算法,只是一种简单的编码起到方便传输的问题,作为加密也不安全,它可逆。
1. 网络数据传输:怎么传输二进制数据?可以用Base64将二进制数据进行编码,将编码得到的字符串数据进行传输,接收方再使用Base64解码
2. 密钥存储:密钥是二进制数据,我们可以用Base64对他进行表述展示,毕竟二进制可读性差
3. 等
参考 <<Java加密与解密的艺术>>
边栏推荐
猜你喜欢
天鹰优化的半监督拉普拉斯深度核极限学习机用于分类
Gramm Angle field GAF time-series data into the image and applied to the fault diagnosis
杰哥带大家做一次meterpreter内网渗透模拟
SegNet——论文笔记
电脑知识:台式电脑应该选择品牌和组装,值得收藏
SENet detailed explanation and Keras reproduction code
Database document generation tool V1.0
sql常用函数
狗都能看懂的CenterNet讲解及代码复现
基于子空间结构保持的迁移学习方法MLSSM
随机推荐
为什么不使用VS管理QT项目
av_read_frame 阻塞,基于回调的解决办法
电脑知识:台式电脑应该选择品牌和组装,值得收藏
有且仅有的三种处理JSON的方法
DOM的12中节点类型,通过关系或方法获取DOM节点,渲染到浏览器页面的一些特效功能,获取DOM节点来改变属性,点击图片,切换为所点击的图片为背景图,页面上的表单验证,点击底部导航栏切换界面
Online public account article content to audio file practical gadget
网络端口大全
Multi-threaded sequential output
目标检测中的先验框(Anchor)
【音视频开发系列】fdk_aac 之 PCM 转 AAC
基于爬行动物搜索RSA优化LSTM的时间序列预测
Vmmem process (WSL2) consumes huge amount of memory
升级到 MediaPlayer 11 时跳过验证副本的方法
MySQL(4)
沉浸式体验参加网络安全培训班,学习过程详细到底!
ffmpeg打开rtsp流应该设置的几个参数
键盘扫描码
VS 2017编译 QT no such slot || 找不到*** 问题
无监督特征对齐的迁移学习理论框架
你要悄悄学网络安全,然后惊艳所有人