日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android数据加密之——Base64编码算法

發(fā)布時(shí)間:2023/12/20 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android数据加密之——Base64编码算法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

注:本文為轉(zhuǎn)載文章,原文請(qǐng)參考:Android數(shù)據(jù)加密之Base64編碼算法

前言:

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

什么Base64算法?

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

  • 標(biāo)準(zhǔn)Base64只有64個(gè)字符(英文大小寫(xiě)、數(shù)字和+、/)以及用作后綴等號(hào);
  • Base64是把3個(gè)字節(jié)變成4個(gè)可打印字符,所以Base64編碼后的字符串一定能被4整除(不算用作后綴的等號(hào));
  • 等號(hào)一定用作后綴,且數(shù)目一定是0個(gè)、1個(gè)或2個(gè)。這是因?yàn)槿绻拈L(zhǎng)度不能被3整除,Base64要在后面添加\0湊齊3n位。為了正確還原,添加了幾個(gè)\0就加上幾個(gè)等號(hào)。顯然添加等號(hào)的數(shù)目只能是0、1或2;
  • 嚴(yán)格來(lái)說(shuō)Base64不能算是一種加密,只能說(shuō)是編碼轉(zhuǎn)換。

下圖為Base64編碼表:

Base64編碼的用處?

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

Base64具體實(shí)現(xiàn)

字符串進(jìn)行Base64編碼

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

字符串進(jìn)行Base64解碼

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

對(duì)文件進(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(); }

對(duì)文件進(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(); }

針對(duì)Base64.DEFAULT參數(shù)說(shuō)明

無(wú)論是編碼還是解碼都會(huì)有一個(gè)參數(shù)Flags,Android提供了以下幾種:

  • DEFAULT 這個(gè)參數(shù)是默認(rèn),使用默認(rèn)的方法來(lái)加密
  • NO_PADDING 這個(gè)參數(shù)是略去加密字符串最后的”=”
  • NO_WRAP 這個(gè)參數(shù)意思是略去所有的換行符(設(shè)置后CRLF就沒(méi)用了)
  • CRLF 這個(gè)參數(shù)看起來(lái)比較眼熟,它就是Win風(fēng)格的換行符,意思就是使用CR LF這一對(duì)作為一行的結(jié)尾而不是Unix風(fēng)格的LF
  • URLSAFE 這個(gè)參數(shù)意思是加密時(shí)不使用對(duì)URL和文件名有特殊意義的字符來(lái)作為加密字符,具體就是以-和取代+和/

總結(jié):

Base64編碼看似簡(jiǎn)單,但是其在實(shí)際開(kāi)發(fā)中使用相當(dāng)廣泛。目前項(xiàng)目中只是用到這么多,以后用到更復(fù)雜的情況的時(shí)候再做補(bǔ)充。

總結(jié)

以上是生活随笔為你收集整理的Android数据加密之——Base64编码算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。