Android 安全加密:消息摘要Message Digest詳解
Android安全加密專題文章索引
以上學(xué)習所有內(nèi)容,對稱加密、非對稱加密、消息摘要、數(shù)字簽名等知識都是為了理解數(shù)字證書工作原理而作為一個預(yù)備知識。數(shù)字證書是密碼學(xué)里的終極武器,是人類幾千年歷史總結(jié)的智慧的結(jié)晶,只有在明白了數(shù)字證書工作原理后,才能理解Https 協(xié)議的安全通訊機制。最終才能在SSL 開發(fā)過程中得心應(yīng)手。
另外,對稱加密和消息摘要這兩個知識點是可以單獨拿來使用的。
知識點串聯(lián):
數(shù)字證書使用到了以上學(xué)習的所有知識
- 對稱加密與非對稱加密結(jié)合使用實現(xiàn)了秘鑰交換,之后通信雙方使用該秘鑰進行對稱加密通信。
- 消息摘要與非對稱加密實現(xiàn)了數(shù)字簽名,根證書機構(gòu)對目標證書進行簽名,在校驗的時候,根證書用公鑰對其進行校驗。若校驗成功,則說明該證書是受信任的。
- Keytool 工具可以創(chuàng)建證書,之后交給根證書機構(gòu)認證后直接使用自簽名證書,還可以輸出證書的RFC格式信息等。
- 數(shù)字簽名技術(shù)實現(xiàn)了身份認證與數(shù)據(jù)完整性保證。
- 加密技術(shù)保證了數(shù)據(jù)的保密性,消息摘要算法保證了數(shù)據(jù)的完整性,對稱加密的高效保證了數(shù)據(jù)處理的可靠性,數(shù)字簽名技術(shù)保證了操作的不可否認性。
通過以上內(nèi)容的學(xué)習,我們要能掌握以下知識點:
- 基礎(chǔ)知識:bit 位、字節(jié)、字符、字符編碼、進制轉(zhuǎn)換、io
- 知道怎樣在實際開發(fā)里怎樣使用對稱加密解決問題
- 知道對稱加密、非對稱加密、消息摘要、數(shù)字簽名、數(shù)字證書是為了解決什么問題而出現(xiàn)的
- 了解SSL 通訊流程
- 實際開發(fā)里怎樣請求Https 的接口
1. 常見算法
MD5、SHA、CRC 等
2. 使用場景
- 對用戶密碼進行md5 加密后保存到數(shù)據(jù)庫里
- 軟件下載站使用消息摘要計算文件指紋,防止被篡改
- 數(shù)字簽名(后面知識點)
- 百度云,360網(wǎng)盤等云盤的妙傳功能用的就是sha1值
- Eclipse和Android Studio開發(fā)工具根據(jù)sha1值來判斷v4,v7包是否沖突
- 據(jù)說銀行的密碼使用的就是MD5加密(因為MD5具有不可逆性)
例如軟件下載站數(shù)據(jù)指紋:http://dev.mysql.com/downloads/installer/
3. 使用步驟
//常用算法:MD5、SHA、CRC MessageDigest digest = MessageDigest.getInstance("MD5"); byte[] result = digest.digest(content.getBytes()); //消息摘要的結(jié)果一般都是轉(zhuǎn)換成16 進制字符串形式展示 String hex = Hex.encode(result); //MD5 結(jié)果為16 字節(jié)(128 個比特位)、轉(zhuǎn)換為16 進制表示后長度是32 個字符 //SHA 結(jié)果為20 字節(jié)(160 個比特位)、轉(zhuǎn)換為16 進制表示后長度是40 個字符 System.out.println(hex);
消息摘要后的結(jié)果是固定長度,無論你的數(shù)據(jù)有多大,哪怕是只有一個字節(jié)或者是一個G 的文件,摘要后的結(jié)果都是固定長度。
經(jīng)常聽到有人問這樣的問題,MD5 摘要后結(jié)果到底是多少位?有的人說是16 位,有的說是128 位,有的說是32 位。到底是多長,這個時候我們就要明白,16 位指的是字節(jié)位數(shù),128 位指的是比特位,32 位指的結(jié)果轉(zhuǎn)換成16 進制展示的字符位數(shù)。
4. 數(shù)字摘要原理
//獲取實例 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();
相關(guān)文章
Android開發(fā)RecyclerView單獨刷新使用技巧
本篇文章主要是分享下RecyclerView中子item如何單獨刷新以及子item的某一部分內(nèi)容如何實現(xiàn)單獨刷新,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09Android使用Notification實現(xiàn)通知功能
這篇文章主要為大家詳細介紹了Android使用Notification實現(xiàn)通知功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11Android自定義View制作動態(tài)炫酷按鈕實例解析
這篇文章主要為大家詳細解析了Android自定義View制作動態(tài)炫酷按鈕實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-07-07flutter 路由跳轉(zhuǎn)的實現(xiàn)示例
這篇文章主要介紹了flutter 路由跳轉(zhuǎn)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2020-08-08