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類去請求另一個服務器,則須要手動編碼。