1、Base64编码
1)应用场景:可用于在HTTP环境下传递较长的标识信息。例如Hibernate采用Base64将一个唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。
NotePad++右键菜单"Plugin commands"的"Base64 Encode"和"Base64 Decode"子菜单项,可以感受下。
2)编码方法:使用由A-Z、a-z、0-9、"+"、"/"(还有用于填充的"=")组成的字符集表示所有的符号。
具体的转换步骤:
(1)将每三个字节即24个bit作为一组;(2)将这24个bit分成四小组,每小组有6个bit;(3)在每小组前加00,扩展成四个字节即32个bit;(4)根据下表,将得到扩展后每个字节的对应符号,组合起来就是base64的编码值。
因为Base64将三个字节转化成四个字节,因此Base64编码后的文本大小会比原文本大出三分之一左右。
A | 0 | I | 8 | Q | 16 | Y | 24 | g | 32 | o | 40 | w | 48 | 4 | 56 |
B | 1 | J | 9 | R | 17 | Z | 25 | h | 33 | p | 41 | x | 49 | 5 | 57 |
C | 2 | K | 10 | S | 18 | a | 26 | i | 34 | q | 42 | y | 50 | 6 | 58 |
D | 3 | L | 11 | T | 19 | b | 27 | j | 35 | r | 43 | z | 51 | 7 | 59 |
E | 4 | M | 12 | U | 20 | c | 28 | k | 36 | s | 44 | 0 | 52 | 8 | 60 |
F | 5 | N | 13 | V | 21 | d | 29 | l | 37 | t | 45 | 1 | 53 | 9 | 61 |
G | 6 | O | 14 | W | 22 | e | 30 | m | 38 | u | 46 | 2 | 54 | + | 62 |
H | 7 | P | 15 | X | 23 | f | 31 | n | 39 | v | 47 | 3 | 55 | / | 63 |
3)一些例子
字节数刚好是3的情况。如将Man转换成Base64编码:
(1)"M"、"a"、"n"的ASCII值分别是77、97、110,对应的二进制值是01001101、01100001、01101110,将它们连成一个24位的二进制位串010011010110000101101110;
(2)将这个24位的位串分成4个小组,每小组6个bit:010011、010110、000101、101110;
(3)在每小组前面加00,扩展成四个字节即32个bit:00010011、00010110、00000101、00101110。它们的十进制值分别是19、22、5、46。
(4)根据上面的对照表,得到最终的Base64编码为TWFu。
字节数是2的情况。此时需要将这两个字节的16个bit转成三组,最后一组除了前面加00以外,后面也要加00。再在得到的Base64编码末尾补上"="。如将Ma转换成Base64编码:
转换成00010011、00010110、00000100以后,根据上面的对照表得到T、W、E,补上"=",因此最终的Base64编码就是TWE=。
字节数是1的情况。将这一个字节的8个bit转成二组,最后一组除了前面加00以外,后面再加4个0。再在得到的Base64编码末尾补上两个"="。如将M转换成Base64编码:
转换成00010011、00010000,根据对照表得到T、Q,补上两个"=",因此最终的Base64编码就是TQ==。
2、MD5消息摘要算法:加密哈希函数,输出是一个128位的哈希值。
参考链接:
http://www.ruanyifeng.com/blog/2008/06/base64.html
不断学习中。。。