Base64背景、原理和JAVA实现(不调包)

出现背景

        用记事本直接打开密文,我们会发现出现了乱码,这是因为密文每八位二进制经过编码后有可能变为无法显示和打印的字符,这就造成了乱码。Base64则能将不可打印或者显示的字符转为可读的ASCII(国际标准)字符(A-Z、 a-z、 0-9、 /、 +、)。Base64属于Base编码的一种,除了Base64,还有Base32、Base16,相对来说,Base64增加的长度最少,所以被使用的也最为广泛。

使用场景

(1)网络间传输的内容

        协议中为了正常传输数据,会有各种各样的转义字符,而使用Base64则可以降低数据在传输过程中出错的可能性,增加可靠性以及提升效率。

(2)纯文本协议

        常见文本协议:HTTP超文本传输协议、SMTP 简单邮件传输协议、FTP 文件传输协议、DNS 域名系统、XML 协议、XMPP 协议等。在使用这些协议传输数据时,需要对数据进行处理,将其转为可读的字符。由于Base64的字符范围为“A-Z a-z 0-9 / +”,还有补充字符“=”,以及每76个字符添加一个换行符“\n”,其中“+”、“\n”和“=”都会在URL中被转为别的字符,,而在URL中“+”会被转换为空格,“\n”会被解释为换行,“=”会被解释为赋值,所以会用urlencode进行编码。

(3)DataURL

        HTML中用DataURL内联小图片,节省HTTP请求,加快网页呈现速度

(4)数字证书

         .pem后缀的文件,是ASCII文本格式。在DER格式或者其他二进制数据的基础上,使用BASE64编码为ASCII文本,以便于在仅支持ASCII的环境中使用二进制的DER编码的数据。

编码方式

        数据在计算机内部都是以二进制方式表示,是根据各种编码方式变为了有语义的字符,主要编码方式有ASCII编码、拓展ASCII编码、Unicode编码以及GB2312

ASCII编码 拓展ASCII编码 Unicode编码 GBK/GB2312/GBB18030
用于表示英文,第一位规定为0,剩下七位进行编码。 为了解决欧洲国家英文字符上有拼音的问题,将第八位利用上了,但不同国家拓展ASCII编码代表的字符是不同的,即拓展ASCII编码与字符不是一一对应的。

Unicode编码与字符是一一对应的,但严格来说Unicode只是一种符号集,因为它并没有解决如何存储这些字节,有的国家一个字节代表一个字符,有的国家二个字节代表一个字符。

所以后面出现了编码方式:UTF-8、UTF-16、UTF-32。UTF-8是最常用的,属于变长的编码方式,用1-4个字节来表示。

GBK和GB2312都是针对简体字的编码,只是GB2312只支持六千多个汉字的编码,而GBK支持1万多个汉字编码。而GB18030是用于繁体字的编码。汉字存储时都使用两个字节来储存。

        Base64是可以逆转换的,是对数据的一种编码方式,不属于加密的一种方法。

原理

        Base64严格来说共使用了ASCII字符集中的65个字符(A-Z  a-z  0-9  /  + =),其中=用于不满3n个字节,并且需要补充1-2个字节的情况,补充一个字节则用=代替。在ASCII编码中八比特一编码,在Base64编码中六比特一编码,六和八的最小公倍数为24,所以三个字节经过BASE64编码后正好能变成四个字节,数据量增加了25%。

        处理流程:将文本转为二进制,然后对其进行BASE64编码,然后转为二进制,又对其进行ASCII编码,则最终得到的文本全都是可显示字符,不会出现乱码等情况。

        在介绍Base64编码前,首先看看ASCII编码与BASE64编码对应表。

二进制 十进制 十六进制 ASCII编码 BASE64编码
0 0 0 NUL (NULL)空字符 A
1 1 1 SOH (Start Of Headling)标题开始 B
10 2 2 STX (Start Of Text)正文开始 C
11 3 3 ETX (End Of Text)正文结束 D
100 4 4 EOT (End Of Transmission)传输结束 E
101 5 5 ENQ (Enquiry)请求 F
110 6 6 ACK (Acknowledge)回应 G
111 7 7 BEL (Bell)响铃 H
1000 8 8 BS (Backspace)退格 I
1001 9 9 HT (Horizontal Tab)水平制表符 J
1010 10 0A LF/NL(Line Feed/New Line)换行键 K
1011 11 0B VT (Vertical Tab)垂直制表符 L
1100 12 0C FF/NP (Form Feed/New Page)换页键 M
1101 13 0D CR (Carriage Return)回车键 N
1110 14 0E SO (Shift Out)不用切换 O
1111 15 0F SI (Shift In)启用切换 P
10000 16 10 DLE (Data Link Escape)数据链路转义 Q
10001 17 11 DC1/XON(Device Control 1/Transmission On)设备控制1/传输开始 R
10010 18 12 DC2 (Device Control 2)设备控制2 S
10011 19 13 DC3/XOFF(Device Control 3/Transmission Off)设备控制3/传输中断 T
10100 20 14 DC4 (Device Control 4)设备控制4 U
10101 21 15 NAK (Negative Acknowledge)无响应/非正常响应/拒绝接收 V
10110 22 16 SYN (Synchronous Idle)同步空闲
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

哈哈哈biu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值