base64编码

Base64编码

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码具有不可读性,需要解码后才能阅读。
—来自百度百科

Base64可以成为密码学的基石,非常重要。

特点

  • 可以将任意的二进制数据进行Base64编码。
  • 数据加密之后,数据量会变大,变大1/3左右。
  • 编码后有个非常显著的特点,末尾有个=号。
  • 可进行反向解密
  • Base64编码具有不可读性

结果
所有的数据都能被编码为并只用65个字符就能表示的文本文件
65字符

A~Z a~z 0~9 + / =
索引对应字符索引对应字符索引对应字符索引对应字符
0A17R34i51z
1B18S35j520
2C19T36k531
3D20U37l542
4E21V38m553
5F22W39n564
6G23X40o575
7H24Y41p586
8I25Z42q597
9J26a43r608
10K27b44s619
11L28c45t62+
12M29d46u63/
13N30e47v
14O31f48w
15P32g49x
16Q33h50y

对文件进行base64编码后文件数据的变化

编码后的数据~=编码 前数据的4/3,会大1/3左右。

Base64加密原则

6bit(原8bit)一个字节,不足的位数用0补齐,两个0用一个=表示。

Base64编码原理

Base64编码的思想是:采用64个基本的ASCII码字符对数据进行重新编码。

  • 将需要编码的数据拆分成字节数组,以3个字节为一组,按顺序排列24位数据,再把这24位数据分成4组,即每组6位;
  • 再在每组的的最高位前补两个0凑足一个字节,这样就把一个3字节为一组的数据重新编码成了4个字节;
  • 当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节,这时在最后一组填充1到2个0字节,并在最后编码完成后在结尾添加1到2个=号。

对ABC进行Base64编码过程

- 首先取ABC对应的ASCII码值
A : 65、B : 66、C : 67
- 再取二进制值
A : 01000001、B : 01000010、C : 01000011
- 然后把这三个字节的二进制码接起来
010000 010100 001001 000011
- 再以6位为单位分成4个数据块并在最高位填充两个0后形成4个字节的编码后的值
00010000、00010100、00001001、00000011
- 再把这4个字节数据转化成10进制数
16、20、19、3
- 最后根据Base64给出的64个基本字符表,查出对应的ASCII码字符
Q、U、J、D
这里的值实际就是数据在字符表中的索引。
解码过程就是把4个字节再还原成3个字节再根据不同的数据形式把字节数组重新整理成数据。

注:Base64字符表,包括大写A-Z小写a-z数字0-9+以及/

处理过程说明

a. 转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。
b. 数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择查表选择对应的字符作为编码后的输出。
c. 不断进行,直到全部输入数据转换完成。
d. 如果最后剩下两个输入数据,在编码结果后加1个“=”;
e. 如果最后剩下一个输入数据,编码结果后加2个“=”;
f. 如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。
g. 编码"Man"->Base64:“TWFu”

Man

M 77 a 97 n 110

01001101 01100001 01101110

010011 010110 000101 101110

19 22 5 46

T W F u

命令行进行Base64编码和解码
(A进行编码后是QQ==)
  编码    $ echo -n A | base64
  解码    $ echo -n QQ== |base64 -d
  
  A 
  01000001
  010000 010000 000000
  "A"->Base64:"Q=="
  
  B C
  01000010  01000011
  010000  100100 001100
  Q       k      M
  "BC"->Base64:"QkM="
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Erice_s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值