国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

base64_encode和base64_decode的JAVA實(shí)現(xiàn)

2019-11-26 14:23:46
字體:
供稿:網(wǎng)友

Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)代碼的編碼方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的詳細(xì)規(guī)范。 Base64要求把每三個(gè)8Bit的字節(jié)轉(zhuǎn)換為四個(gè)6Bit的字節(jié)(3*8 = 4*6 = 24),然后把6Bit再添兩位高位0,組成四個(gè)8Bit的字節(jié),也就是說,轉(zhuǎn)換后的字符串理論上將要比原來的長1/3

php 的函數(shù):base64_encode() 和 base64_decode()

base64的編,解碼原理

Base64 編碼其實(shí)是將3個(gè)8位字節(jié)轉(zhuǎn)換為4個(gè)6位字節(jié),( 3*8 = 4*6 = 24 ) 這4個(gè)六位字節(jié) 其實(shí)仍然是8位,只不過高兩位被設(shè)置為0. 當(dāng)一個(gè)字節(jié)只有6位有效時(shí),它的取值空間為0 到 2的6次方減1 即63,也就是說被轉(zhuǎn)換的Base64編碼的每一個(gè)編碼的取值空間為(0~63) 。

事實(shí)上,0~63之間的ASCII碼有許多不可見字符,所以應(yīng)該再做一個(gè)映射,映射表為

'A' ~ 'Z' ? ASCII(0 ~ 25)

'a' ~ 'z' ? ASCII(26 ~ 51)

'0' ~ '9' ? ASCII(52 ~ 61)

' ' ? ASCII(62)

'/' ? ASCII(63)

這樣就可以將3個(gè)8位字節(jié),轉(zhuǎn)換為4個(gè)可見字符。

具體的字節(jié)拆分方法為:(圖(畫得不好,領(lǐng)會(huì)精神 :-))

aaaaaabb ccccdddd eeffffff    //abcdef其實(shí)就是1或0,為了看的清楚就用abcdef代替

~~~~~~~~ ~~~~~~~~ ~~~~~~~~

字節(jié) 1 字節(jié) 2 字節(jié) 3

    ||
    //

00aaaaaa 00bbcccc 00ddddee 00ffffff

注:上面的三個(gè)字節(jié)位原文,下面四個(gè)字節(jié)為Base64編碼,其前兩位均為0。

這樣拆分的時(shí)候,原文的字節(jié)數(shù)量應(yīng)該是3的倍數(shù),當(dāng)這個(gè)條件不能滿足時(shí),用全零字節(jié)

補(bǔ)足,轉(zhuǎn)化時(shí)Base64編碼用=號(hào)代替,這就是為什么有些Base64編碼以一個(gè)或兩個(gè)等號(hào)結(jié)

束的原因,但等號(hào)最多有兩個(gè),因?yàn)椋喝绻鸉(origin)代表原文的字節(jié)數(shù),F(xiàn)(remain)代

表余數(shù),則

F(remain) = F(origin) MOD 3 成立。

所以F(remain)的可能取值為0,1,2.

如果設(shè) n = [F(origin)

主站蜘蛛池模板: 丁青县| 磴口县| 普兰店市| 留坝县| 梅河口市| 龙井市| 莒南县| 穆棱市| 甘南县| 明水县| 偏关县| 横山县| 伊川县| 泰州市| 清河县| 高州市| 迭部县| 涿鹿县| 深水埗区| 桦南县| 遵义县| 荆州市| 宁晋县| 井冈山市| 芮城县| 甘洛县| 博湖县| 金寨县| 大足县| 响水县| 丰县| 黄梅县| 罗平县| 祁连县| 莎车县| 合作市| 东明县| 库伦旗| 横山县| 三都| 烟台市|