码神之路首页投稿(暂停使用,暂停投稿)程序员

一步到位 Base64 编码

2016-10-01  本文已影响737人  JSON_NULL

相关文章:
Base64 之 JavaScript 实现
在Web前端还可以这样实现Base64

什么是Base64

下面一段引用百度百科的介绍,不知道你看后会有什么感想,反正当初我刚接触Base64时是没看明白它在说什么。

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域中的形式。此时,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

下面这段是给出我的理解,当然要看懂下面这段,你需要掌握一些非常基础的计算机技术常识,如:一个字节是8bits(8位)等。

Base64编码要求把3个8位字节(3x8=24)转化为4个6位的字节(4x6=24),因为在计算机中,一个字节是8bits所以需要在编码后的6位的前面补两个0,形成8位一个字节的形式。 在对一个串(可能是字符串,也可以是二进制串)进行Base64编码的过程中,如果最后剩下的串不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='。
为了保证所输出的编码是可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。
我曾把Base64编码理解成64进制(把陌生概念映射到熟悉的领域帮助理解),但Base64编码与64进制不完全一样。

编码规则

  1. 把3个字符变成4个字符。
  2. 每76个字符加一个换行符。
  3. 最后的结束符也要处理。

Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3x8 = 4x6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。

Base64编码表

码值 字符 码值 字符 码值 字符 码值 字符
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /

编码过程

这里仅举一个ASCII码编码过程的例子。针对UTF-8或图片等的编码过程与之类似,只是把对应的 转成ascii转换成2进制 这两步替换成其他对应的步骤,只要能得到一个2进制串就行了。

首先把原理的公式列一下: 3x8=4x6
内存1个字符占8位
转前: a 4 9
先转成ascii:对应 97 52 57(只有ascii字符才会这样操作)
转成2进制: 01100001 00110100 00111001
6个一组(4组) {011000}{010011}{010000}{111001}
然后才有后面的 011000 010011 010000 111001
然后计算机是8位8位的存数 6不够,自动就补两个高位0了
所以有了 高位补0得到:00011000 00010011 00010000 00111001
转成十进制得到: 24 19 16 57
查表得到 Y T Q 5

Base64 编码的扩展

Base64 在 URL 中的扩展

标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。

为解决此问题,可采用一种用于URL的改进Base64编码,它在末尾填充'='号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。

Base64在正则表达式中的扩展

用于正则表达式的改进Base64,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”在正则表达式中都具有特殊含义。

相关文章

Base64 之 JavaScript 实现
在Web前端还可以这样实现Base64

上一篇下一篇

猜你喜欢

热点阅读