Android資料加密之Base64編碼演算法

來源:互聯網
上載者:User

標籤:ace   大小   不能   可見   height   link   top   input   except   

Android資料加密之Base64編碼演算法前言:

      前面學習總結了平時開發中遇見的各種資料加密方式,最終都會對加密後的位元據進行Base64編碼,起到一種二次加密的效果,其實呢Base64從嚴格意義上來說的話不是一種密碼編譯演算法,而是一種編碼演算法,為何要使用Base64編碼呢?它解決了什麼問題?這也是本文探討的東西?

     其他幾種加密方式:

  • Android資料加密之Rsa加密

  • Android資料加密之Aes加密

  • Android資料加密之Des加密

  • Android資料加密之MD5加密

  • Android資料加密之Base64編碼演算法

  • Android資料加密之異或密碼編譯演算法

 

什麼Base64演算法?

     Base64是網路上最常見的用於傳輸8Bit位元組代碼的編碼方式之一,Base64並不是安全領域的密碼編譯演算法,其實Base64隻能算是一個編碼演算法,對資料內容進行編碼來適合傳輸。標準Base64編碼解碼無需額外資訊即完全可逆,即使你自己自訂字元集設計一種類Base64的編碼方式用於資料加密,在多數情境下也較容易破解。Base64編碼本質上是一種將位元據轉成文本資料的方案。對於非位元據,是先將其轉換成二進位形式,然後每連續6位元(2的6次方=64)計算其十進位值,根據該值在A--Z,a--z,0--9,+,/ 這64個字元中找到對應的字元,最終得到一個文本字串。基本規則如下幾點:

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

為Base64編碼錶

Base64編碼的用處?

    在電腦中任何資料都是按ascii碼儲存的,而ascii碼的128~255之間的值是不可見字元。而在網路上交換資料時,比如說從A地傳到B地,往往要經過多個路由裝置,由於不同的裝置對字元的處理方式有一些不同,這樣那些不可見字元就有可能被處理錯誤,這是不利於傳輸的。所以就先把資料先做一個Base64編碼,統統變成可見字元,這樣出錯的可能性就大降低了。

Base64具體實現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參數說明

無論是編碼還是解碼都會有一個參數Flags,Android提供了以下幾種

  • DEFAULT 這個參數是預設,使用預設的方法來加密

  • NO_PADDING 這個參數是略去加密字串最後的”=”

  • NO_WRAP 這個參數意思是略去所有的分行符號(設定後CRLF就沒用了)

  • CRLF 這個參數看起來比較眼熟,它就是Win風格的分行符號,意思就是使用CR LF這一對作為一行的結尾而不是Unix風格的LF

  • URL_SAFE 這個參數意思是加密時不使用對URL和檔案名稱有特殊意義的字元來作為加密字元,具體就是以-和_取代+和/

總結:

     Base64編碼看似簡單,但是其在實際開發中使用相當廣泛。目前項目中只是用到這麼多,以後用到更複雜的情況的時候再做補充。

Android資料加密之Base64編碼演算法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.