Java 加解密技術系列之 BASE64html
1.Base64將輸入的字符串或一段數據編碼成只含有{'A'-'Z', 'a'-'z', '0'-'9', '+', '/'}這64個字符的串,'='用於填充。java
2.做用web
[0-9a-zA-Z+/=]
, 不可打印字符(包括轉移字符)也可傳輸;
3.Base64主要用於將不可打印的字符轉換成可打印字符,或者簡單的說將二進制數據編碼成ASCII字符。正則表達式
將二進制數據編碼成ASCII字符主要的目的是能在純文本內容中插入二進制數據,常見的應用場景包括:算法
電子郵件數據庫
這個可參考阮一峯的《MIME筆記》apache
微軟的MHT格式編程
這是模仿郵件格式將多種資源打包在一個文件中的格式,全部二進制資源都採用 Base64 編碼。網絡
XML文件app
這是一個純文本文件,若是要基於 XML 格式設計能夠保存圖片或其它附件的數據格式,那就須要將這些二進制數據轉碼成 ASCII 字符。
DATA URL
最近流行起來的 Data URL,要在URL中使用二進制數據,固然也只能進行 ASCII 編碼
項目查詢背景:目前項目中,本地文件所有使用UTF-8進行編碼,Android網絡訪問所有采用Base64加密傳輸,所以考慮Base64和Url編碼是否會有衝突,查詢的結果是沒有衝突,能夠直接放在Url中穩定傳輸。
如下是查詢的結果,方便之後查詢。
Base64編碼詳解:http://www.cnblogs.com/lifesting/archive/2012/07/12/2587923.html
如下內容引用地址:http://hi.baidu.com/westfruit/item/bc09df16c7ae5d761009b5d6
Base64編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統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)。 []在迅雷下載地址中的應用 不少下載類網站都提供「迅雷下載」的連接,其地址一般是加密的迅雷專用下載地址。
如thunder://QUFodHRwOi8vd3d3LmJhaWR1LmNvbS9pbWcvc3NsbTFfbG9nby5naWZaWg==
其實迅雷的「專用地址」也是用Base64加密的,其加密過程以下:
1、在地址的先後分別添加AA和ZZ
如www.baidu.com/img/sslm1_logo.gif變成
AAwww.baidu.com/img/sslm1_logo.gifZZ
2、對新的字符串進行Base64編碼
如AAwww.baidu.com/img/sslm1_logo.gifZZ用Base64編碼獲得
QUFodHRwOi8vd3d3LmJhaWR1LmNvbS9pbWcvc3NsbTFfbG9nby5naWZaWg==
3、在上面獲得的字符串前加上「thunder://」就成了
thunder://QUFodHRwOi8vd3d3LmJhaWR1LmNvbS9pbWcvc3NsbTFfbG9nby5naWZaWg==
有時候咱們須要使用一個URL做爲URL地址的參數來傳遞,假如咱們須要傳遞的URL含有參數,例如:
/shopping/confirm.action?id=1&name=itzhai
那麼按照以下的方法傳送,那麼,參數會丟失:
www.itzhai.com/submit.action?url=/shopping/confirm.action?id=1&name=itzhai;
爲了能正常的傳遞參數,咱們可使用Base64對URL進行編碼後再傳遞,接收到時再進行解碼,這樣就能夠正確獲取到傳遞的URL了。下面是基本的代碼:
引入Jar包
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
爲URL編碼:
String url = "/shopping/confirm.action?id=1&name=itzhai"; String code = new String(Base64.encode(url.getBytes()));
這樣得到的code爲:
L3Nob3BwaW5nL2NvbmZpcm0uYWN0aW9uP2lkPTEmbmFtZT1pdHpoYWk=
而後接受到該code時,就能夠爲URL解碼了:
String url = new String(Base64.decode("L3Nob3BwaW5nL2NvbmZpcm0uYWN0aW9uP2lkPTEmbmFtZT1pdHpoYWk="));
轉自-http://blog.csdn.net/happylee6688/article/details/43950521