有些場(chǎng)合下,例如在要實(shí)現(xiàn)自動(dòng)登錄時(shí)本地存儲(chǔ)用戶的賬號(hào)和密碼,不能用明碼來(lái)標(biāo)識(shí)。這時(shí)候就首先需要對(duì)這些關(guān)鍵信息進(jìn)行加密。對(duì)信息進(jìn)行加密有許多種,下面將詳細(xì)介紹BASE 64編碼的實(shí)現(xiàn),以及自定義BASE 64編碼表以提升解密難度。 BASE 64編碼要求把3個(gè)8位字節(jié)(3*8=24)轉(zhuǎn)化為4個(gè)6位的字節(jié)(4*6=24),之后在6位的前面補(bǔ)兩個(gè)0,形成8位一個(gè)字節(jié)的形式。在標(biāo)準(zhǔn)BASE 64編碼表中,最后轉(zhuǎn)化的4個(gè)6位字節(jié)都可以用ASCII明碼顯示出來(lái)。以字符串“張3”為例: 字符串:張3 原byte數(shù)組:11010101 11000101 00110011 編碼后的byte數(shù)組:00110101 00011100 00010100 00110011 對(duì)應(yīng)十進(jìn)制數(shù)值:53 34 20 51 標(biāo)準(zhǔn)編碼表對(duì)應(yīng)字符:1 i U z 可以這么考慮:把字符串的原始字節(jié)數(shù)組連成一串,然后順序依次選6個(gè)出來(lái),之后再把這6二進(jìn)制數(shù)前面再添加兩個(gè)0,就成了一個(gè)新的字節(jié)。之后再選出6個(gè)來(lái),再添加0,依此類(lèi)推,直到24個(gè)二進(jìn)制數(shù)全部被選完,就得到了編碼后的字節(jié)數(shù)組。 標(biāo)準(zhǔn)的BASE 64為了讓轉(zhuǎn)碼后所有的字符都可見(jiàn),設(shè)計(jì)了如下標(biāo)準(zhǔn)編碼表: 2012-8-3 16:54:14 上傳 依據(jù)此表中十進(jìn)制數(shù)值與字符的映射關(guān)系,最后得到標(biāo)準(zhǔn)編碼表對(duì)應(yīng)字符序列,即字符串最終編碼為“1iUz”。
3.依據(jù)編碼表對(duì)明文進(jìn)行加密,具體過(guò)程為: 讀取明文3字節(jié)數(shù)據(jù)用&操作取前6位,放入新的變量中右移兩位,高兩位清0后與編碼表中相應(yīng)值進(jìn)行&操作;取第一個(gè)字節(jié)的后2位和第二個(gè)字節(jié)的前4位移位放入新變量中右移兩位,清0……依此類(lèi)推。 解碼為編碼的逆過(guò)程。具體代碼實(shí)現(xiàn)請(qǐng)參考本章Demo中的示例代碼。 Demo運(yùn)行效果如下: 2012-8-3 16:50:56 上傳
|
|
來(lái)自: 昵稱(chēng)Q99IG > 《文件夾1》