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