王芳 白宇
摘要:通過(guò)對(duì)傳統(tǒng)BASE64編碼及解碼算法進(jìn)行改造,使用預(yù)處理技術(shù)、哈希技術(shù)和正則文法,提出了一種適合Web客戶端應(yīng)用,使用JavaScdpt編碼的輕量化BASE64編碼及解碼算法。該算法比傳統(tǒng)的BASE64編碼及解碼算法實(shí)現(xiàn)簡(jiǎn)單,代碼效率高。
關(guān)鍵詞:BASE64;Web;哈希;編碼;解碼
中圖分類(lèi)號(hào):TP311.12 文獻(xiàn)標(biāo)識(shí)碼:A DOI:10.3969/j.issn.1003-6970.2015.04.005
0.引言
在Web應(yīng)用開(kāi)發(fā)過(guò)程中,客戶端編碼經(jīng)常遇到一些非標(biāo)ASCII字符串傳輸?shù)膯?wèn)題。如果該字符串是URI(統(tǒng)一資源標(biāo)識(shí)符),通常的解決辦法是使用JavaScript中Globa對(duì)象的encodeURIO和decodeURIO方法;如果該字符串是用于客戶端和服務(wù)端參數(shù)傳遞的內(nèi)容,則通常的解決辦法是使用JavaScript中Globa對(duì)象的escapeO和unescapeO方法。但是這兩種方法都存在很大的局限性,例如,所編碼的字符串長(zhǎng)度有很大限制,編碼內(nèi)容對(duì)于不同版本及語(yǔ)言瀏覽器中不同版本的腳本引擎并不完全兼容。
而在Web客戶端普遍使用的ASCII全兼容編碼是BASE64,但傳統(tǒng)的BASE64編碼、解碼算法相對(duì)比較笨重,實(shí)現(xiàn)代碼較多,算法較復(fù)雜,不符合Web客戶端代碼輕量化的需求。本文從字符映射、哈希和正則文法的角度出發(fā),提出了一種簡(jiǎn)潔、高效的編碼、解碼算法。
1.算法思路
由于Web中的所有字符均以Unicode的方式進(jìn)行表示,因此編碼之前首先需將Unicode字符串轉(zhuǎn)換為UCS-16編碼的字節(jié)數(shù)組;同理,解碼之后,需將UCS-16編碼的字節(jié)數(shù)組轉(zhuǎn)換為Unicode字符串。因此整個(gè)算法分為四個(gè)部分:Unicode字符串轉(zhuǎn)為UCS-16字節(jié)數(shù)組;BASE64編碼算法;BASE64解碼算法;UCS-16字節(jié)數(shù)組轉(zhuǎn)為Unicode字符串。關(guān)于BASE64編碼、解碼的一般規(guī)則,可參見(jiàn)文獻(xiàn),本文不再贅述。