一步到位 Base64 编码

作者: JSON_NULL | 来源:发表于2016-10-01 14:18 被阅读737次

相关文章:
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

相关文章

  • Base64 之 JavaScript 实现

    相关文章:一步到位 Base64 编码在Web前端还可以这样实现Base64 JavaScript 实现 Base...

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

    相关文章:一步到位 Base64 编码Base64 之 JavaScript 实现 上面的相关文章中有一篇Base...

  • iOS URL安全的Base64编码、解码

    参考iOS开发探索-Base64编码iOS URL编码&base64编码URL安全的Base64编码,解码 为什么...

  • BASE64 编码简析

    Base64编码: <1>·Base64编码简介: <2>·使用Base64的原因: <3>·编码原理: 成这个字...

  • SMTP整理

    账号:BASE64编码的账号 密码:BASE64编码的密码 快速BASE64编码网址: http://tools....

  • base64 和 url base64 和 encodeURIC

    1 先来看base64编码 2 再看url base64编码 可以看出,非url base64不会对斜杠进行编码。...

  • Base系列加密解密

    Base编码系列:[Base64][Base32] [Base16] [Base64] Base64编码是使用64...

  • java android 对接接口加密

    加密方式 方案1 使用Base64编码最常用的就是Base64编码了,Base64不算是加密,只是把字符经过编码变...

  • Base64

    Base64简介 Base64 原理解析 编码实现 Base64简介 命令行运行base64编码和解码 对文件操作...

  • base64编码解码原理散图

    base64编码出现原因: base64转码原理000.png base64编码原理: base64转码原理.pn...

网友评论

    本文标题:一步到位 Base64 编码

    本文链接:https://www.haomeiwen.com/subject/hwrgettx.html