Base64編碼方法 |
|
Base64編碼的作用:由于某些系統(tǒng)中只能使用ASCII字符。Base64就是用來將非ASCII字符的數(shù)據(jù)轉(zhuǎn)換成ASCII字符的一種方法。它使用下面表中所使用的字符與編碼。 |
Base64編碼方法要求把每三個8Bit的字節(jié)轉(zhuǎn)換為四個6Bit的字節(jié),其中,轉(zhuǎn)換之后的這四個字節(jié)中每6個有效bit為是有效數(shù)據(jù),空余的那兩個bit用0補上成為一個字節(jié)。因此Base64所造成數(shù)據(jù)冗余還是比較嚴(yán)重的,采用這中編碼方法會使得編碼后的數(shù)據(jù)長度變成編碼前長度的三分之四倍。但是,Base64是當(dāng)今比較流行的編碼方法,因為它編起來“速度快而且簡單”,這是網(wǎng)上的說法,我更覺得它是歷史遺留下來的原因。
舉個例子,有三個字節(jié)的原始數(shù)據(jù):aaaaaabb bbbbccccc ccdddddd(這里每個字母表示一個bit位)
那么編碼之后會變成: 00aaaaaa 00bbbbbb 00cccccc 00dddddd
上面的例子只是說明了Base64的移位方式,因為我語言表達(dá)能力較差,唯恐造成誤解,故舉此例。
這還沒完,讀者現(xiàn)在只是了解了Base64編碼方法的一部分,還有一個Base64編碼表需要了解,編碼表是這樣的:
現(xiàn)在先別管上面這個表,在知道了移位方式之后,請再看個例子。
有三個字節(jié)的原始數(shù)據(jù):10101101 10111010 01110110
編碼之后的數(shù)據(jù)是: 00101011 00011011 00101001 00110110 (還是數(shù)字看起來比較整齊~)
編碼之后的這四個字節(jié)都轉(zhuǎn)換成為十進制數(shù)是:
43 27 42 54
現(xiàn)在用這四個數(shù)去上面那個編碼表里找,找到的字符是r b q 2,于是乎,三個字節(jié)的原始數(shù)據(jù):10101101 10111010 01110110經(jīng)Base64編碼方法編碼之后的結(jié)果是rbq2。
還有很重要的一點要說明,如果原文的字節(jié)數(shù)量如果不是3的倍數(shù),不夠的地方可以用全0來補足來湊成6位一組的字節(jié)。如前面所述,Base64編碼方法要求把每三個8Bit的字節(jié)轉(zhuǎn)換為四個6Bit的字節(jié),所以當(dāng)轉(zhuǎn)換后的字節(jié)數(shù)不4的倍數(shù)時,就要使用“=”來補足,因為編碼前的一個字節(jié)只少可以對應(yīng)編碼后的二個字節(jié),一個正確Base64編碼最多只會有兩個“=”。所以對于Base64解碼,就是把上面的過程逆著來一遍即可。
|