
Base64编码机制和转换
发布日期:2021-05-08 17:25:14
浏览次数:22
分类:原创文章
本文共 3226 字,大约阅读时间需要 10 分钟。
Base64编码
- Base64用来表示二进制
- Linux中有很多不可见字符,放到文件中,查看就是乱码
- 使用ASCII码转化Base64为可见的字符
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,
Base64就是一种基于64个可打印字符来表示二进制数据的方法。
BASE64来历
base64拢共就有64个
其中包括:
- 52个字母,26个字母,大小写52个
- 10个数字0~9
- 1个+加号
- 1个/斜线
一共64个 - 其实还有一个替补位为等号=
- base64 6位64个字符
每个base64字符表现位6位的二进制数 - ascii 7位128个字符
每个ascii字符表现为8位的二进制数
base64编码图
转换过程
- 将每3个字节放入一个24位的缓冲区中,最后不足3个字节的,缓冲区的剩余部分用0来填补。
- 然后每次取出6位(2的6次方为64,使用64个字符即可表示所有),将高2位用0来填充,组成一个新的字节,
- 计算出这个新字节的十进制值,对应上面的编码表,输出相应的字符。
- 这样不断地进行下去,就可完成对所有数据的编码工作。
- 对二进制数转换
- 每3个字节进行转换,1个字节8位,3个字节就是24位
- 不足3个字节用0补位,需要补足所有3个字节的空位
- 新构建出来的字节(3字节2进制数)摆好姿势
- 每次从新字节中取出6位,计算出对应的10进制
- 将新算出来的10进制对应编码表,输出相应自读
Base64编码会把3字节的二进制数据编码为4字节的文本数据,长度增加33%,好处是编码后的文本数据可以在邮件正文、网页等直接显示。
如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。
转换实例
- BASE64 6位2进制
- ASCII
Man转换为base64
- 先查ascii码转换为2进制
m 6d 01101101
a 61 01100001
n 6e 01101110 - 6位凑在一起进行切割生成新2进制
将3个8位二进制数转换成4个6位二进制数
6d | 61 | 6e ## 放在一起摆好姿势01101101 | 01100001 | 01101110 ## 合并011011010110000101101110 ## 重新分割,6位一组011011 | 010110 | 000101|101110 ##转换成对应的10进制数16+8+3=27 | 16+4+2=22 | 4+1=5 | 32+8+4+2=46
- 新2进制转换成10进制再查base64表
27=b|22=W|5=F|46=u - 完成转换
man对应的Base63编码就是
27|22|5|46=bWFu
echo -n man | base64bWFuecho -n Man | base64TWFu
后补位的0不是真正的0用=表示
bash64命令
- Linux中文本常用ascii保存
- Linux中使用bash64命令可以直接将ascii字符转换为bash64编码字符
echo -e 'man'|base32NVQW4CQ=echo -e 'man'|base64bWFuCg==echo -e 'Man'|base64TWFuCg==echo -e 'mans'|base64bWFucwo=echo -e 'manss'|base64bWFuc3MK
实例
- 破解下面密文:
JiN4NUMwRjsmI3g0RjE5OyYjeDRGMzQ7JiN4NEVFQzsmI3hGRjBDOyYjeDRGNjA7JiN4NEVFQzsmI3g1OTdEOyYjeDU0NDA7JiN4RkYwMTsmI3g3RUM4OyYjeDRFOEU7JiN4N0I0OTsmI3g1MjMwOyYjeDRGNjA7JiN4NTU2NjsmI3hGRjAxOyYjeDUyQTA7JiN4NjIxMTtRJiN4NTQyNzsmI3hGRjAxOzEyMiYjeDdBN0E7JiN4NjgzQzs1MjYmI3g3QTdBOyYjeDY4M0M7NDc3JiN4NEUwMDsmI3g4RDc3OyYjeDVGMDA7JiN4NUZDMzsmI3g3Njg0OyYjeDczQTk7JiN4ODAwRDsmI3g1NDI3OyYjeEZGMDE7Cg==
J=9=8+1=1001=001001
i=34=32+2=100010=100010
N=13=8+4+1=1101=001101
4=56=32+16+8=111000=111000
- 凑够24位了,可以转换一波了
姿势先摆好
001001 100010 001101 111000 ##合并001001100010001101111000 ##按8位一组重新划分00100110 | 00100011 | 01111000 ##按8位一组重新划分0010 0110 | 0010 0011 | 0111 1000 ##转化为16进制数26 | 23 | 78 ##查ascii表% | # | x
JXU0表示的ascii字符为%u4
- 使用base64 -d可以将base64编码转换ascii字符
[00:42:46 rooter@C8-3-55 ~]#cat > bash.64 <<SUNJiN4NUMwRjsmI3g0RjE5OyYjeDRGMzQ7JiN4NEVFQzsmI3hGRjBDOyYjeDRGNjA7JiN4NEVFQzsmI3g1OTdEOyYjeDU0NDA7JiN4RkYwMTsmI3g3RUM4OyYjeDRFOEU7JiN4N0I0OTsmI3g1MjMwOyYjeDRGNjA7JiN4NTU2NjsmI3hGRjAxOyYjeDUyQTA7JiN4NjIxMTtRJiN4NTQyNzsmI3hGRjAxOzEyMiYjeDdBN0E7JiN4NjgzQzs1MjYmI3g3QTdBOyYjeDY4M0M7NDc3JiN4NEUwMDsmI3g4RDc3OyYjeDVGMDA7JiN4NUZDMzsmI3g3Njg0OyYjeDczQTk7JiN4ODAwRDsmI3g1NDI3OyYjeEZGMDE7Cg==SUN[00:43:31 rooter@C8-3-55 ~]#base64 -d bash.64 小伙伴们,你们好呀!终于等到你啦!加我Q吧!122空格526空格477一起开心的玩耍吧!
- 转换的结果为
小伙伴们,你们好呀!终于等到你啦!加我Q吧!122空格526空格477一起开心的玩耍吧!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月14日 18时30分30秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
师兄面试遇到这条 SQL 数据分析题,差点含泪而归!
2019-03-05
C语言的数值溢出问题(上)
2019-03-05
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
2019-03-05
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
2019-03-05
android:使用audiotrack 类播放wav文件
2019-03-05
聊聊我的五一小假期
2019-03-05
数据库三个级别封锁协议
2019-03-05
ACM/NCPC2016 C Card Hand Sorting(upc 3028)
2019-03-05
ubuntu学习笔记-常用文件、命令以及作用(hosts、vim、ssh)
2019-03-05
SLAM学习笔记-求解视觉SLAM问题
2019-03-05
程序员应该知道的97件事
2019-03-05
create-react-app路由的实现原理
2019-03-05
openstack安装(九)网络服务的安装--控制节点
2019-03-05
shell编程(六)语言编码规范之(变量)
2019-03-05
vimscript学习笔记(二)预备知识
2019-03-05
Android数据库
2019-03-05
HTML基础,块级元素/行内元素/行内块元素辨析【2分钟掌握】
2019-03-05
STM8 GPIO模式
2019-03-05
23种设计模式一:单例模式
2019-03-05