Wiki
Base64是一種基于64個可打印字符來表示二進制數據的表示方法。由于2的6次方等于64,所以每6個比特為一個單元,對應某個可打印字符。
三個字節有24個比特,對應于4個Base64單元,即3個字節需要用4個可打印字符來表示。它可用來作為電子郵件的傳輸編碼。
在Base64中的可打印字符包括字母A-Z、a-z、數字0-9,這樣共有62個字符,此外兩個可打印符號在不同的系統中而不同。
一些如uuencode的其他編碼方法,和之后binhex的版本使用不同的64字符集來代表6個二進制數字,但是它們不叫Base64。
Base64常用于在通常處理文本數據的場合,表示、傳輸、存儲一些二進制數據。包括MIME的email、在XML中存儲復雜數據。
例子
舉例來說,一段引用自托馬斯·霍布斯《利維坦》的文句:
Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.
經過base64編碼之后變成:
TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=
在URL中的應用
Base64編碼可用于在HTTP環境下傳遞較長的標識信息。
例如,在Java持久化系統Hibernate中,就采用了Base64來將一個較長的唯一標識符(一般為128-bit的UUID)編碼為一個字符串,用作HTTP表單和HTTP GET URL中的參數。
在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。
此時,采用Base64編碼不僅比較簡短,同時也具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。
然而,標準的Base64并不適合直接放在URL里傳輸,因為URL編碼器會把標準Base64中的“/”和“+”字符變為形如“%XX”的形式,而這些“%”號在存入數據庫時還需要再進行轉換,因為ANSI SQL中已將“%”號用作通配符。
為解決此問題,可采用一種用于URL的改進Base64編碼,它不在末尾填充'='號,并將標準Base64中的“+”和“/”分別改成了“-”和“_”,這樣就免去了在URL編解碼和數據庫存儲時所要作的轉換,避免了編碼信息長度在此過程中的增加,并統一了數據庫、表單等處對象標識符的格式。
另有一種用于正則表達式的改進Base64變種,它將“+”和“/”改成了“!”和“-”,因為“+”,“*”以及前面在IRCu中用到的“[”和“]”在正則表達式中都可能具有特殊含義。
此外還有一些變種,它們將“+/”改為“_-”或“._”(用作編程語言中的標識符名稱)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。
在線加密解密工具
[推薦] http://www.bejson.com/enc/base64/
[備用] http://tool.chinaz.com/tools/base64.aspx