Android數(shù)據(jù)加密之SHA安全散列算法
前言:
對于SHA安全散列算法,以前沒怎么使用過,僅僅是停留在聽說過的階段,今天在看圖片緩存框架Glide源碼時(shí)發(fā)現(xiàn)其緩存的Key采用的不是MD5加密算法,而是SHA-256加密算法,這才勾起了我的好奇心,所以趁著晚上沒啥事,來學(xué)習(xí)一下。
其他幾種加密方式:
•Android數(shù)據(jù)加密之Rsa加密
•Android數(shù)據(jù)加密之Aes加密
•Android數(shù)據(jù)加密之Des加密
•Android數(shù)據(jù)加密之MD5加密
•Android數(shù)據(jù)加密之Base64編碼算法
SHA加密算法
SHA(Secure Hash Algorithm,安全散列算法),數(shù)字簽名等密碼學(xué)應(yīng)用中重要的工具,被廣泛地應(yīng)用于電子商務(wù)等信息安全領(lǐng)域。和MD5加密算法一樣,也是一種不可逆的加密算法,不過也可以通過窮舉法破解,但是SHA的破譯難度與成本要高于MD5,相對于MD5更加安全,現(xiàn)在已成為公認(rèn)的最安全的散列算法之一,并被廣泛使用。主要包括SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512這幾種單向散列算法。SHA-1,SHA-224和SHA-256適用于長度不超過2^64二進(jìn)制位的消息。SHA-384和SHA-512適用于長度不超過2^128二進(jìn)制位的消息。官方解說如下:
•由消息摘要反推原輸入消息,從計(jì)算理論上來說是很困難的。
•想要找到兩組不同的消息對應(yīng)到相同的消息摘要,從計(jì)算理論上來說也是很困難的。任何對輸入消息的變動(dòng),都有很高的機(jī)率導(dǎo)致其產(chǎn)生的消息摘要迥異。
SHA加密原理
SHA-1是一種數(shù)據(jù)加密算法,該算法的思想是接收一段明文,然后以一種不可逆的方式將它轉(zhuǎn)換成一段(通常更?。┟芪模部梢院唵蔚睦斫鉃槿∫淮斎氪a(稱為預(yù)映射或信息),并把它們轉(zhuǎn)化為長度較短、位數(shù)固定的輸出序列即散列值(也稱為信息摘要或信息認(rèn)證代碼)的過程。
單向散列函數(shù)的安全性在于其產(chǎn)生散列值的操作過程具有較強(qiáng)的單向性。如果在輸入序列中嵌入密碼,那么任何人在不知道密碼的情況下都不能產(chǎn)生正確的散列值,從而保證了其安全性。SHA將輸入流按照每塊512位(64個(gè)字節(jié))進(jìn)行分塊,并產(chǎn)生20個(gè)字節(jié)的被稱為信息認(rèn)證代碼或信息摘要的輸出。
該算法輸入報(bào)文的長度不限,產(chǎn)生的輸出是一個(gè)160位的報(bào)文摘要。輸入是按512 位的分組進(jìn)行處理的。SHA-1是不可逆的、防沖突,并具有良好的雪崩效應(yīng)。
通過散列算法可實(shí)現(xiàn)數(shù)字簽名實(shí)現(xiàn),數(shù)字簽名的原理是將要傳送的明文通過一種函數(shù)運(yùn)算(Hash)轉(zhuǎn)換成報(bào)文摘要(不同的明文對應(yīng)不同的報(bào)文摘要),報(bào)文摘要加密后與明文一起傳送給接受方,接受方將接受的明文產(chǎn)生新的報(bào)文摘要與發(fā)送方的發(fā)來報(bào)文摘要解密比較,比較結(jié)果一致表示明文未被改動(dòng),如果不一致表示明文已被篡改。
MAC (信息認(rèn)證代碼)就是一個(gè)散列結(jié)果,其中部分輸入信息是密碼,只有知道這個(gè)密碼的參與者才能再次計(jì)算和驗(yàn)證MAC碼的合法性。
SHA加密優(yōu)點(diǎn)
由于SHA也是有MD4演變過來的,所以其優(yōu)點(diǎn)與MD5大致一樣
•壓縮性:任意長度的數(shù)據(jù),算出的SHA值長度都是固定的。
•容易計(jì)算:從原數(shù)據(jù)計(jì)算出SHA值很容易。
•抗修改性:對原數(shù)據(jù)進(jìn)行任何改動(dòng),哪怕只修改1個(gè)字節(jié),所得到的SHA值都有很大區(qū)別。
•強(qiáng)抗碰撞:已知原數(shù)據(jù)和其SHA值,想找到一個(gè)具有相同SHA值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的。
SHA應(yīng)用場景
•一致性驗(yàn)證
•數(shù)字簽名
•安全訪問認(rèn)證
SHA加密的簡單實(shí)現(xiàn)
這里代碼演示以SHA-256為例。
public static String sha(String string) { if (TextUtils.isEmpty(string)) { return ""; } MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("sha-256"); byte[] bytes = md5.digest((string ).getBytes()); String result = ""; for (byte b : bytes) { String temp = Integer.toHexString(b & 0xff); if (temp.length() == 1) { temp = "0" + temp; } result += temp; } return result; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; }
SHA安全性探討
•SHA-1在許多安全協(xié)議中廣為使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被視為是MD5(更早之前被廣為使用的散列函數(shù))的后繼者。2005年,密碼學(xué)家就證明SHA-1的破解速度比預(yù)期提高了2000倍,雖然破解仍然是極其困難和昂貴的,但隨著計(jì)算機(jī)變得越來越快和越來越廉價(jià),SHA-1算法的安全性也逐年降低,已被密碼學(xué)家嚴(yán)重質(zhì)疑,希望由安全強(qiáng)度更高的SHA-2替代它。
•SHA-224、SHA-256、SHA-384,和SHA-512并稱為SHA-2。
•新的散列函數(shù)并沒有接受像SHA-1一樣的公眾密碼社區(qū)做詳細(xì)的檢驗(yàn),所以它們的密碼安全性還不被大家廣泛的信任。
•雖然至今尚未出現(xiàn)對SHA-2有效的攻擊,它的算法跟SHA-1基本上仍然相似;因此有些人開始發(fā)展其他替代的散列算法。
跨國公司事跡:
Google官方博客宣布,將在Chrome瀏覽器中逐漸降低SHA-1證書的安全指示。但有意思的是Google.com目前使用的也是SHA-1簽名的證書,但證書將在3個(gè)月內(nèi)過期,Google將從2015年起使用SHA-2簽名的證書。SHA-1算法目前尚未發(fā)現(xiàn)嚴(yán)重的弱點(diǎn),但偽造證書所需費(fèi)用正越來越低。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android實(shí)現(xiàn)炫酷的網(wǎng)絡(luò)直播彈幕功能
這篇文章主要為大家詳細(xì)介紹了Android仿網(wǎng)絡(luò)直播彈幕功能的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Android控件FlowLikeView實(shí)現(xiàn)點(diǎn)贊動(dòng)畫
這篇文章主要為大家詳細(xì)介紹了一個(gè)點(diǎn)贊動(dòng)畫的優(yōu)雅控件FlowLikeView,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06Android仿泡泡窗實(shí)現(xiàn)下拉菜單條實(shí)例代碼
最近參與android的項(xiàng)目開發(fā),其中遇到這樣的需求:點(diǎn)擊下拉按鈕,顯示出所有的條目,有刪除和點(diǎn)擊功能,點(diǎn)擊后將條目顯示。下面通過實(shí)例代碼給大家介紹下Android仿泡泡窗實(shí)現(xiàn)下拉菜單條效果,需要的朋友參考下吧2017-05-05Android viewpage實(shí)現(xiàn)禁止滑動(dòng)的功能
這篇文章主要介紹了Android viewpage實(shí)現(xiàn)禁止滑動(dòng)的功能的相關(guān)資料,這里附有實(shí)現(xiàn)的實(shí)例代碼,主要還是重新 ViewPage 這個(gè)類,需要的朋友可以參考下2016-11-11Android開發(fā)中requestfocus()無效的原因及解決辦法
這篇文章主要介紹了Android開發(fā)中requestfocus()無效的原因及解決辦法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08android studio集成ijkplayer的示例代碼
本篇文章主要介紹了android studio集成ijkplayer的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09簡單仿寫Android控件SlidingMenu的實(shí)例代碼
下面小編就為大家分享一篇簡單仿寫Android控件SlidingMenu的實(shí)例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01