免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Base64

一:算法由來

Base64最早應(yīng)用于解決電子郵件傳輸?shù)膯栴}。在早期,由于“歷史問題”,電子郵件只允許ASCII碼字符。如果要傳輸一封帶有非ASCII碼字符的電子郵件(例如附件),當(dāng)它通過有“歷史問題”的網(wǎng)關(guān)時(shí)就可能出現(xiàn)問題(網(wǎng)關(guān)可能會(huì)對(duì)非ASCII碼字符的二進(jìn)制位作調(diào)整,即將非ASCII碼的8位二進(jìn)制碼最高位置為0)。此時(shí)用戶收到的郵件會(huì)是一封純粹的亂碼郵件,由于這個(gè)原因產(chǎn)生了base64算法。Base64是一種編碼方式,而不是一種加密方式

電子郵件的附件一般也作Base64編碼的,因?yàn)橐粋€(gè)附件數(shù)據(jù)往往是有不可見字符的。
對(duì)證書來說,特別是根證書,一般都是作Base64編碼的,因?yàn)樗诰W(wǎng)上被許多人下載。

  • 標(biāo)準(zhǔn)Base64只有64個(gè)字符(英文大小寫、數(shù)字和+、/)以及用作后綴等號(hào)
  • base64是把3個(gè)字節(jié)變成4個(gè)可打印字符,所以base64編碼后的字符串一定能被4整除(不算用作后綴的等號(hào))
  • 等號(hào)一定用作后綴,且數(shù)目一定是0個(gè)、1個(gè)或2個(gè)。這是因?yàn)槿绻拈L(zhǎng)度不能被3整除,base64要在后面添加\0湊齊3n位。為了正確還原,添加了幾個(gè)\0就加上幾個(gè)等號(hào)。顯然添加等號(hào)的數(shù)目只能是0、1或2;

Base64是一種任意二進(jìn)制到文本字符串的編碼方法(二進(jìn)制=》ASCII),Base64適用于小段內(nèi)容的編碼,常用于在URL、Cookie、網(wǎng)頁中傳輸少量二進(jìn)制數(shù)據(jù)、數(shù)字證書簽名、密鑰。

“123456”對(duì)應(yīng)的二進(jìn)制位 00110001 00110010 00110011 00110100 00110101 00110110, 我們?nèi)?個(gè)比特為一組結(jié)果為

  • 001100
  • 010011
  • 001000
  • 110011
  • 001101
  • 000011
  • 010100
  • 110110

對(duì)應(yīng)的base64為:MTIzNDU2

由于標(biāo)準(zhǔn)的Base64編碼后可能出現(xiàn)字符+和/,在URL中就不能直接作為參數(shù),所以又有一種”url safe”的base64編碼,其實(shí)就是把字符+和/分別變成-和_:
由于=字符也可能出現(xiàn)在Base64編碼中,但=用在URL、Cookie里面會(huì)造成歧義,所以,很多Base64編碼后會(huì)把=去掉或者替換成.

二:Base64Util

public class Base64Util { public static String encode(String src){ BASE64Encoder encoder = new BASE64Encoder(); String encode = encoder.encode(src.getBytes()); return encode; } public static String decode(String encode) throws Exception { BASE64Decoder decoder = new BASE64Decoder(); byte[] bytes = decoder.decodeBuffer(encode); return new String(bytes); } /** * 將base64種的敏感字符+,/,=轉(zhuǎn)化為_,-,. 以及base64會(huì)在編碼串中產(chǎn)生換行符 * @param source * @return */ public static String urlSafeEncode(byte[] source) { BASE64Encoder encoder = new BASE64Encoder(); String str = encoder.encode(source); str = str.replaceAll('\\+', '_'); str = str.replaceAll('/', '-'); str = str.replaceAll('=', '.'); str = str.replaceAll('\\s', ''); return str; } /** * urlSafeEncode逆過程 * @param str * @return * @throws IOException */ public static byte[] urlSafeDecode(String str) throws IOException { if (str == null) { return null; } str = str.replaceAll('_', '+'); str = str.replaceAll('-', '/'); str = str.replaceAll('\\.', '='); BASE64Decoder decoder = new BASE64Decoder(); byte[] bytes = decoder.decodeBuffer(str); return bytes; } public static void main(String[] args) throws Exception{ String encode = Base64Util.encode('123456'); String decode = Base64Util.decode(encode); System.out.println(encode); System.out.println(decode); }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
python整數(shù)、字符串、字節(jié)串相互轉(zhuǎn)換 | Lixingcong
Python encode和decode
Ruby實(shí)例編程說明字符編碼,解決亂碼問題
專業(yè)在線電子書網(wǎng)站
Python 字符編碼轉(zhuǎn)換要訣
黃聰:解決python中文處理亂碼,先要弄懂“字符”和“字節(jié)”的差別
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服