posts - 195, comments - 34, trackbacks - 0, articles - 1

          Base64編碼方法學(xué)習(xí)

          Posted on 2007-08-21 11:34 小強摩羯座 閱讀(475) 評論(0)  編輯  收藏
          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編碼表需要了解,編碼表是這樣的:
          編號 字符 編號 字符 編號 字符 編號 字符 編號 字符l
          0 A 16 Q 32 g 48 w (pad) =
          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 /
            現(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解碼,就是把上面的過程逆著來一遍即可。
           



          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 乌审旗| 扶风县| 中超| 工布江达县| 德州市| 屯留县| 兴和县| 屏东县| 东山县| 许昌市| 昂仁县| 老河口市| 若尔盖县| 永泰县| 义乌市| 永济市| 花莲市| 道孚县| 盘锦市| 磐石市| 龙州县| 任丘市| 浦北县| 榆树市| 古田县| 衡阳市| 古丈县| 仲巴县| 石楼县| 连州市| 乌恰县| 汕尾市| 龙州县| 罗定市| 汝南县| 淮阳县| 常宁市| 孙吴县| 商丘市| 哈尔滨市| 河津市|