国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android數(shù)據(jù)加密之Base64編碼算法的簡單實現(xiàn)

2019-12-12 05:05:55
字體:
供稿:網(wǎng)友

前面學(xué)習(xí)總結(jié)了平時開發(fā)中遇見的各種數(shù)據(jù)加密方式,最終都會對加密后的二進制數(shù)據(jù)進行Base64編碼,起到一種二次加密的效果,其實呢Base64從嚴格意義上來說的話不是一種加密算法,而是一種編碼算法,為何要使用Base64編碼呢?它解決了什么問題?這也是本文探討的東西?

什么Base64算法?

Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)代碼的編碼方式之一,Base64并不是安全領(lǐng)域的加密算法,其實Base64只能算是一個編碼算法,對數(shù)據(jù)內(nèi)容進行編碼來適合傳輸。標準Base64編碼解碼無需額外信息即完全可逆,即使你自己自定義字符集設(shè)計一種類Base64的編碼方式用于數(shù)據(jù)加密,在多數(shù)場景下也較容易破解。Base64編碼本質(zhì)上是一種將二進制數(shù)據(jù)轉(zhuǎn)成文本數(shù)據(jù)的方案。對于非二進制數(shù)據(jù),是先將其轉(zhuǎn)換成二進制形式,然后每連續(xù)6比特(2的6次方=64)計算其十進制值,根據(jù)該值在A--Z,a--z,0--9,+,/ 這64個字符中找到對應(yīng)的字符,最終得到一個文本字符串?;疽?guī)則如下幾點:

標準Base64只有64個字符(英文大小寫、數(shù)字和+、/)以及用作后綴等號;Base64是把3個字節(jié)變成4個可打印字符,所以Base64編碼后的字符串一定能被4整除(不算用作后綴的等號);等號一定用作后綴,且數(shù)目一定是0個、1個或2個。這是因為如果原文長度不能被3整除,Base64要在后面添加/0湊齊3n位。為了正確還原,添加了幾個/0就加上幾個等號。顯然添加等號的數(shù)目只能是0、1或2;嚴格來說Base64不能算是一種加密,只能說是編碼轉(zhuǎn)換。

下圖為Base64編碼表

Base64編碼的用處?

在計算機中任何數(shù)據(jù)都是按ascii碼存儲的,而ascii碼的128~255之間的值是不可見字符。而在網(wǎng)絡(luò)上交換數(shù)據(jù)時,比如說從A地傳到B地,往往要經(jīng)過多個路由設(shè)備,由于不同的設(shè)備對字符的處理方式有一些不同,這樣那些不可見字符就有可能被處理錯誤,這是不利于傳輸?shù)?。所以就先把?shù)據(jù)先做一個Base64編碼,統(tǒng)統(tǒng)變成可見字符,這樣出錯的可能性就大降低了。

Base64具體實現(xiàn)

1.)字符串進行Base64編碼

String encodedString = Base64.encodeToString("whoislcj".getBytes(), Base64.DEFAULT); Log.e("Base64", "Base64---->" + encodedString);

2.)字符串進行Base64解碼

 String decodedString =new String(Base64.decode(encodedString,Base64.DEFAULT)); Log.e("Base64", "Base64---->" + decodedString);

3.)對文件進行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.)對文件進行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ù)是默認,使用默認的方法來加密

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é):

Base64編碼看似簡單,但是其在實際開發(fā)中使用相當廣泛。目前項目中只是用到這么多,以后用到更復(fù)雜的情況的時候再做補充。

以上就是小編為大家?guī)淼腁ndroid數(shù)據(jù)加密之Base64編碼算法的簡單實現(xiàn)全部內(nèi)容了,希望大家多多支持武林網(wǎng)~

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 汉源县| 柘荣县| 赫章县| 和林格尔县| 红原县| 子长县| 天峨县| 吉木萨尔县| 蒙山县| 富平县| 安塞县| 孙吴县| 城口县| 普洱| 九台市| 乐清市| 义马市| 商洛市| 庆阳市| 石河子市| 宁夏| 台山市| 渝北区| 北票市| 元朗区| 高尔夫| 濮阳市| 吕梁市| 湛江市| 无棣县| 台南市| 新平| 唐山市| 阜阳市| 峡江县| 句容市| 金秀| 汝州市| 靖州| 江北区| 平塘县|