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编码图

base64

转换过程

  1. 将每3个字节放入一个24位的缓冲区中,最后不足3个字节的,缓冲区的剩余部分用0来填补。
  2. 然后每次取出6位(2的6次方为64,使用64个字符即可表示所有),将高2位用0来填充,组成一个新的字节,
  3. 计算出这个新字节的十进制值,对应上面的编码表,输出相应的字符。
  4. 这样不断地进行下去,就可完成对所有数据的编码工作。
  • 对二进制数转换
  • 每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

  1. 先查ascii码转换为2进制
    m 6d 01101101
    a 61 01100001
    n 6e 01101110
  2. 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
  1. 新2进制转换成10进制再查base64表
    27=b|22=W|5=F|46=u
  2. 完成转换
    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 &#x5C0F;&#x4F19;&#x4F34;&#x4EEC;&#xFF0C;&#x4F60;&#x4EEC;&#x597D;&#x5440;&#xFF01;&#x7EC8;&#x4E8E;&#x7B49;&#x5230;&#x4F60;&#x5566;&#xFF01;&#x52A0;&#x6211;Q&#x5427;&#xFF01;122&#x7A7A;&#x683C;526&#x7A7A;&#x683C;477&#x4E00;&#x8D77;&#x5F00;&#x5FC3;&#x7684;&#x73A9;&#x800D;&#x5427;&#xFF01;
  • 转换的结果为
&#x5C0F;&#x4F19;&#x4F34;&#x4EEC;&#xFF0C;&#x4F60;&#x4EEC;&#x597D;&#x5440;&#xFF01;&#x7EC8;&#x4E8E;&#x7B49;&#x5230;&#x4F60;&#x5566;&#xFF01;&#x52A0;&#x6211;Q&#x5427;&#xFF01;122&#x7A7A;&#x683C;526&#x7A7A;&#x683C;477&#x4E00;&#x8D77;&#x5F00;&#x5FC3;&#x7684;&#x73A9;&#x800D;&#x5427;&#xFF01;
上一篇:CentOS6破解管理员root密码
下一篇:CentOS6修改开机启动菜单背景图片

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月14日 18时30分30秒