Android Base64编码算法
什么Base64算法?
Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)代碼的編碼方式之一,Base64并不是安全領(lǐng)域的加密算法,其實Base64只能算是一個編碼算法,對數(shù)據(jù)內(nèi)容進(jìn)行編碼來適合傳輸。標(biāo)準(zhǔn)Base64編碼解碼無需額外信息即完全可逆,即使你自己自定義字符集設(shè)計一種類Base64的編碼方式用于數(shù)據(jù)加密,在多數(shù)場景下也較容易破解。Base64編碼本質(zhì)上是一種將二進(jìn)制數(shù)據(jù)轉(zhuǎn)成文本數(shù)據(jù)的方案。對于非二進(jìn)制數(shù)據(jù),是先將其轉(zhuǎn)換成二進(jìn)制形式,然后每連續(xù)6比特(2的6次方=64)計算其十進(jìn)制值,根據(jù)該值在A–Z,a–z,0–9,+,/ 這64個字符中找到對應(yīng)的字符,最終得到一個文本字符串。基本規(guī)則如下幾點:
- 標(biāo)準(zhǔn)Base64只有64個字符(英文大小寫、數(shù)字和+、/)以及用作后綴等號;
- Base64是把3個字節(jié)變成4個可打印字符,所以Base64編碼后的字符串一定能被4整除(不算用作后綴的等號);
- 等號一定用作后綴,且數(shù)目一定是0個、1個或2個。這是因為如果原文長度不能被3整除,Base64要在后面添加\0湊齊3n位。為了正確還原,添加了幾個\0就加上幾個等號。顯然添加等號的數(shù)目只能是0、1或2;
- 嚴(yán)格來說Base64不能算是一種加密,只能說是編碼轉(zhuǎn)換。
下圖為Base64編碼表
Base64編碼的用處?
在計算機(jī)中任何數(shù)據(jù)都是按ascii碼存儲的,而ascii碼的128~255之間的值是不可見字符。而在網(wǎng)絡(luò)上交換數(shù)據(jù)時,比如說從A地傳到B地,往往要經(jīng)過多個路由設(shè)備,由于不同的設(shè)備對字符的處理方式有一些不同,這樣那些不可見字符就有可能被處理錯誤,這是不利于傳輸?shù)摹K跃拖劝褦?shù)據(jù)先做一個Base64編碼,統(tǒng)統(tǒng)變成可見字符,這樣出錯的可能性就大降低了。
Base64具體實現(xiàn)
1、字符串進(jìn)行Base64編碼
2、字符串進(jìn)行Base64解碼
String decodedString =new String(Base64.decode(encodedString,Base64.DEFAULT));Log.e("Base64", "Base64---->" + decodedString);3、對文件進(jìn)行Base64編碼
File file = new File("/storage/emulated/0/pimsecure_debug.txt"); FileInputStream inputFile = null; try {inputFile = new FileInputStream(file);byte[] buffer = new byte[(int) file.length()];inputFile.read(buffer);inputFile.close();encodedString = Base64.encodeToString(buffer, Base64.DEFAULT);Log.e("Base64", "Base64---->" + encodedString); } catch (Exception e) {e.printStackTrace(); }4、對文件進(jìn)行Base64解碼
File desFile = new File("/storage/emulated/0/pimsecure_debug_1.txt"); FileOutputStream fos = null; try {byte[] decodeBytes = Base64.decode(encodedString.getBytes(), Base64.DEFAULT);fos = new FileOutputStream(desFile);fos.write(decodeBytes);fos.close(); } catch (Exception e) {e.printStackTrace(); }5、針對Base64.DEFAULT參數(shù)說明
無論是編碼還是解碼都會有一個參數(shù)Flags,Android提供了以下幾種
- DEFAULT 這個參數(shù)是默認(rèn),使用默認(rèn)的方法來加密
- NO_PADDING 這個參數(shù)是略去加密字符串最后的”=”
- NO_WRAP 這個參數(shù)意思是略去所有的換行符(設(shè)置后CRLF就沒用了)
- CRLF 這個參數(shù)看起來比較眼熟,它就是Win風(fēng)格的換行符,意思就是使用CR LF這一對作為一行的結(jié)尾而不是Unix風(fēng)格的LF
- URL_SAFE 這個參數(shù)意思是加密時不使用對URL和文件名有特殊意義的字符來作為加密字符,具體就是以-和_取代+和/
總結(jié)
以上是生活随笔為你收集整理的Android Base64编码算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 24.Odoo产品分析 (三) – 人力
- 下一篇: 不动产测绘数据入库_房产基础地理信息数据