Base64加密原理:浏览器
Base64使用6位二进制表示一个字符,可表示含64个字符的字符集;服务器
加密步骤:编码
将源字节码数据,3个字节共24bit数据为一组,划分为4组每组6个bit位,对每一个分组高位补0成一个字节;加密
若是数据总字节数不是3的倍数,会用0补;编码后的字符后又一个或两个=;spa
如何解决URL参数中不能出现+和/特殊字符的问题?code
为何须要Base64编码?图片
不一样的设备对字符的处理方式存在差别;文本文件中想要包含其余文件,好比图片;开发
Base64的应用场景?字符串
URLEncode、文本传输通道用来传输图片等其余文件it
Base64能够用来加密吗?
编码表
Value | Char | Value | Char | Value | Char | ||
---|---|---|---|---|---|---|---|
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 | / |
在不一样的设备上,对数据的解析方式不大相同,因此容易出现乱码的状况,而一个统一的编码方式,能够避免乱码的出现,那就是base64。总结起来,base64是用来避免乱码的
GET请求的数据会附在URL以后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。若是数据是英文字母/数字,原样发送,若是是空格,转换为+,若是是中文/其余字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
手动在地址栏输入连接:并在连接中附加上中文参数,点击回车后,地址栏中的中文参数变成了一串无规律的字符,地址栏中的参数使用了Base64编码 。
问题:浏览器发送请求时会自动对URL进行base64编码,那服务器是什么时候对URL进行解码的呢,服务器对URL的解码是依赖服务器的具体实现的,不在j2ee的范围内,也不须要开发人员去配置或处理。若是在服务端使用URL类去请求另一个服务器,则须要手动编码。