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