base64编码是把字符串转为二进制后按照一定的分组、补位、十进制转换后,对照base64编码表而生成的编码算法。base64编码是可逆的,可以逆向解码生成明文。base64编码起初是为了解决电子邮件中不能直接使用非ASCII码字符的规定问题。base64编码常用于电子邮件加密、数据加密、base64规避反垃圾邮件和图片、文件的网络传输。
一、base64编码原理流程图
二、base64编码表
索引 | 对应字符 | 索引 | 对应字符 | 索引 | 对应字符 | 索引 | 对应字符 |
0 | A | 17 | R | 34 | i | 51 | z |
1 | B | 18 | S | 35 | j | 52 | 0 |
2 | C | 19 | T | 36 | k | 53 | 1 |
3 | D | 20 | U | 37 | l | 54 | 2 |
4 | E | 21 | V | 38 | m | 55 | 3 |
5 | F | 22 | W | 39 | n | 56 | 4 |
6 | G | 23 | X | 40 | o | 57 | 5 |
7 | H | 24 | Y | 41 | p | 58 | 6 |
8 | I | 25 | Z | 42 | q | 59 | 7 |
9 | J | 26 | a | 43 | r | 60 | 8 |
10 | K | 27 | b | 44 | s | 61 | 9 |
11 | L | 28 | c | 45 | t | 62 | + |
12 | M | 29 | d | 46 | u | 63 | / |
13 | N | 30 | e | 47 | v | ||
14 | O | 31 | f | 48 | w | ||
15 | P | 32 | g | 49 | x | ||
16 | Q | 33 | h | 50 | y |
三、base64编码举例
字符串:"zixuephp.net"
1.把字符串每3个字符为一组,取其ascii编码,如果是中文取其unicode utf-8 16进制编码。(ascii编码对照表)
zix uep hp. net -------------------------------------------------------- //每3个字符为1组,这里4组 122 105 120 117 101 112 104 112 46 110 101 116
2.把ascii编码的10进制值转换成8位二进制,不足8位前面补0。
122 105 120 117 101 112 104 112 46 110 101 116 ---------------------------------------------------------------------------------------------------------------------- 01111010 01101001 01111000 01110101 01100101 01110000 01101000 01110000 00101110 01101110 01100101 01110100
3.把二进制以每6位为一组组成新数据,并转换成10进制。如果没有6位,小于3位以0代替,如果有剩下的空组,以"="代替结果。
01111010 01101001 01111000 01110101 01100101 01110000 01101000 01110000 00101110 01101110 01100101 01110100 ---------------------------------------------------------------------------------------------------------------------//6位新分组 011110 100110 100101 111000 011101 010110 010101 110000 011010 000111 000000 101110 011011 100110 010101 110100 ---------------------------------------------------------------------------------------------------------------------//2转10进制 30 38 37 56 29 22 21 48 26 7 0 46 27 38 21 52
4.对应base64编码对照表获取对应字符
30 38 37 56 29 22 21 48 26 7 0 46 27 38 21 52 ------------------------------------------------------------------------------------------------------------ e m l 4 d W V w a H A u b m V 0
最后base64字符串为:
eml4dWVwaHAubmV0
<?php echo base64_encode('zixuephp.net'); //eml4dWVwaHAubmV0
四、其他举例
1.字符串;"ABCD",每3个字符为一组,少两组末尾补“==“,每6位一新组时不够3位补0,对应值A。如图:
2.中文的base64编码,字符串:“自学网”,
字符串先转16进制为:
e887aa e5ada6 e7bd91
最后按照上面步骤转换成二进制->6位分新组->转10进制->base64对照表->输出base64编码。
//base64编码结果 6Ieq5a2m572R
测试工具: