Android安全加密專題文章索引
- Android安全加密:對稱式加密
- Android安全加密:非對稱式加密
- Android安全加密:訊息摘要Message Digest
- Android安全加密:數位簽章和數位憑證
- Android安全加密:Https編程
以上學習所有內容,對稱式加密、非對稱式加密、訊息摘要、數位簽章等知識都是為了理解數位憑證工作原理而作為一個預備知識。數位憑證是密碼學裡的終極武器,是人類幾千年歷史總結的智慧的結晶,只有在明白了數位憑證工作原理後,才能理解Https 協議的安全通訊機制。最終才能在SSL 開發過程中得心應手。
另外,對稱式加密和訊息摘要這兩個知識點是可以單獨拿來使用的。
知識點串聯:
數位憑證使用到了以上學習的所有知識
- 對稱式加密與非對稱式加密結合使用實現了秘鑰交換,之後通訊雙方使用該秘鑰進行對稱式加密通訊。
- 訊息摘要與非對稱式加密實現了數位簽章,根憑證機構對目標認證進行簽名,在校正的時候,根憑證用公開金鑰對其進行校正。若校正成功,則說明該認證是受信任的。
- Keytool 工具可以建立認證,之後交給根憑證機構認證後直接使用自我簽署憑證,還可以輸出認證的RFC格式資訊等。
- 數位簽章技術實現了身份認證與資料完整性保證。
- 加密技術保證了資料的保密性,訊息摘要演算法保證了資料的完整性,對稱式加密的高效保證了資料處理的可靠性,數位簽章技術保證了操作的不可否認性。
通過以上內容的學習,我們要能掌握以下知識點:
- 基礎知識:bit 位、位元組、字元、字元編碼、進位轉換、io
- 知道怎樣在實際開發裡怎樣使用對稱式加密解決問題
- 知道對稱式加密、非對稱式加密、訊息摘要、數位簽章、數位憑證是為瞭解決什麼問題而出現的
- 瞭解SSL 通訊流程
- 實際開發裡怎樣請求Https 的介面
1. 常見演算法
MD5、SHA、CRC 等
2. 使用情境
- 對使用者密碼進行md5 加密後儲存到資料庫裡
- 軟體下載站使用訊息摘要計算檔案指紋,防止被篡改
- 數位簽章(後面知識點)
- 百度雲,360網盤等雲端硬碟的妙傳功能用的就是sha1值
- Eclipse和Android Studio開發工具根據sha1值來判斷v4,v7包是否衝突
- 據說銀行的密碼使用的就是MD5加密(因為MD5具有無法復原性)
例如軟體下載站資料指紋:http://dev.mysql.com/downloads/installer/
3. 使用步驟
//常用演算法:MD5、SHA、CRCMessageDigest digest = MessageDigest.getInstance("MD5");byte[] result = digest.digest(content.getBytes());//訊息摘要的結果一般都是轉換成16 進位字串形式展示String hex = Hex.encode(result);//MD5 結果為16 位元組(128 個位元位)、轉換為16 進位表示後長度是32 個字元//SHA 結果為20 位元組(160 個位元位)、轉換為16 進位表示後長度是40 個字元System.out.println(hex);
訊息摘要後的結果是固定長度,無論你的資料有多大,哪怕是只有一個位元組或者是一個G 的檔案,摘要後的結果都是固定長度。
經常聽到有人問這樣的問題,MD5 摘要後結果到底是多少位?有的人說是16 位,有的說是128 位,有的說是32 位。到底是多長,這個時候我們就要明白,16 位指的是位元組位元,128 位指的是位元位,32 位指的結果轉換成16 進位展示的字元位元。
4. 數字摘要原理
//擷取執行個體MessageDigest digest = MessageDigest.getInstance("MD5");digest.update(key.getBytes());byte[] bytes = digest.digest(key.getBytes());StringBuilder sb = new StringBuilder();for (int i = 0; i < bytes.length; i++) { String hex = Integer.toHexString(bytes[i]&0xff); if (hex.length() == 1){ sb.append("0"); } sb.append(hex);}String hexstring = sb.toString();