base64编码_几分钟看懂Base64编码原理
Base64簡(jiǎn)介
Base64是基于64個(gè)可打印字符(小寫字母a-z,大寫字母A-Z,數(shù)字0-9,符號(hào)"+","/" 再加上作為墊字的"=",實(shí)際有65個(gè)字符,其他的所有字符都要轉(zhuǎn)換成這個(gè)字符集中的字符),用來(lái)表示任意二進(jìn)制數(shù)據(jù)的方法。
Base64使用緣故
在二進(jìn)制數(shù)據(jù)的傳輸中,常常包含很多無(wú)法顯示和打印的字符,想要他們正常顯示出來(lái),就需要一個(gè)二進(jìn)制到字符串的轉(zhuǎn)換方法。Base64就是一種最常見的二進(jìn)制編碼方法。
常見應(yīng)用就是Base64用于在HTTP協(xié)議下傳輸數(shù)據(jù)。由于HTTP協(xié)議是超文本傳輸協(xié)議,所以需要將在HTTP協(xié)議下傳輸?shù)亩M(jìn)制數(shù)據(jù)轉(zhuǎn)換成字符數(shù)據(jù),而且網(wǎng)絡(luò)傳輸只能傳輸可打印字符,而在實(shí)際網(wǎng)絡(luò)傳輸中,傳輸?shù)臄?shù)據(jù)并不都是可打印字符,比如中文、二進(jìn)制文件,圖片等。為了成功傳輸這些類型的數(shù)據(jù),此時(shí)Base64就派上大用場(chǎng)了。
什么是可打印字符:在ASCII碼中規(guī)定,十進(jìn)制數(shù)字0-31屬于非打印控制字符,32-127屬于可打印字符(32-126在鍵盤上能找到對(duì)應(yīng)的字符,32代表鍵盤中的空格,127代表鍵盤中的DELETE命令)
Base64編碼原理
按照從左往右的規(guī)則,每三個(gè)字節(jié)作為一組,一共就是24個(gè)二進(jìn)制位。
將這24個(gè)二進(jìn)制位分為四組,每組6個(gè)二進(jìn)制位。
之后在每組數(shù)據(jù)前面添加00,組成每個(gè)組8個(gè)二進(jìn)制位,此時(shí)變成了32個(gè)二進(jìn)制位,即四個(gè)字節(jié)
然后根據(jù)下表,得到擴(kuò)展后的每個(gè)字節(jié)的對(duì)應(yīng)符號(hào),base64編碼方法完成
具體Base64編碼演示
"G"、"o"、"d" 三個(gè)字符的ASCII值分別是71、111、100,二進(jìn)制值是01000111、01101111、01100100 ,然后就組成了24位的二進(jìn)制值010001110110111101100100
將這24個(gè)二進(jìn)制位分成四組,分別得到010001、110110、111101、100100
在每組前面添加00,得到00010001、00110110、00111101、00100100
根據(jù)上表,得到每個(gè)值對(duì)應(yīng)Base64編碼,分別是:R、2、9、k
所以,得到字符串"God"的Base64編碼為R29k , 如果一組沒有三個(gè)字節(jié),則是這樣處理的
兩個(gè)字節(jié)的情況:
將這兩個(gè)字節(jié)一共16個(gè)二進(jìn)制位,按照上面的規(guī)則分成三組,最后一組除了前面加上00之外,后面也要加上00,這樣就得到一個(gè)三位的Base64編碼,再在末尾補(bǔ)上一個(gè)"="號(hào)。
比如,"Go" 這個(gè)字符串是兩個(gè)字節(jié),可以轉(zhuǎn)化成三組00010001,00110110,00111100,對(duì)應(yīng)Base64編碼分別為:h、3、8,再加上一個(gè)"="號(hào),因此"Go"的Base64編碼就是h38=
一個(gè)字節(jié)的情況:
將這一個(gè)字節(jié)一共8個(gè)二進(jìn)制位,按照上面的規(guī)則分成兩組,最后一組除了前面加上00之外,后面也要加上0000,這樣就得到一個(gè)兩位的Base64編碼,再在末尾補(bǔ)兩個(gè)"="號(hào)。
比如,"G" 這個(gè)字符串是一個(gè)字節(jié),可以轉(zhuǎn)化成兩組 00010001,00110000,對(duì)應(yīng)Base64編碼分別為:R、w,再加上兩個(gè)"="號(hào),因此"G"的Base64編碼就是Rw==
Java代碼實(shí)現(xiàn)Base64編碼與解碼
public?static?void?main(String[]?args)?throws?UnsupportedEncodingException?{????????//編碼????
????String?encode?=?Base64.getEncoder().encodeToString("God".getBytes());????????
????System.out.println(encode);???
????//解碼????
????System.out.println(new?String(Base64.getDecoder().decode(encode)));
}
打印結(jié)果:
R29kGod
往期精彩文章:
做好第三方對(duì)接,早日漲工資!
分享我的網(wǎng)站部署過(guò)程!
總結(jié)
以上是生活随笔為你收集整理的base64编码_几分钟看懂Base64编码原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bme280 环境传感器开发板_盘一盘那
- 下一篇: bios文件查看工具_修改BIOS让老主