Android數(shù)據(jù)加密之SHA安全散列算法
前言:
對(duì)于SHA安全散列算法,以前沒(méi)怎么使用過(guò),僅僅是停留在聽(tīng)說(shuō)過(guò)的階段,今天在看圖片緩存框架Glide源碼時(shí)發(fā)現(xiàn)其緩存的Key采用的不是MD5加密算法,而是SHA-256加密算法,這才勾起了我的好奇心,所以趁著晚上沒(méi)啥事,來(lái)學(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加密算法一樣,也是一種不可逆的加密算法,不過(guò)也可以通過(guò)窮舉法破解,但是SHA的破譯難度與成本要高于MD5,相對(duì)于MD5更加安全,現(xiàn)在已成為公認(rèn)的最安全的散列算法之一,并被廣泛使用。主要包括SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512這幾種單向散列算法。SHA-1,SHA-224和SHA-256適用于長(zhǎng)度不超過(guò)2^64二進(jìn)制位的消息。SHA-384和SHA-512適用于長(zhǎng)度不超過(guò)2^128二進(jìn)制位的消息。官方解說(shuō)如下:
•由消息摘要反推原輸入消息,從計(jì)算理論上來(lái)說(shuō)是很困難的。
•想要找到兩組不同的消息對(duì)應(yīng)到相同的消息摘要,從計(jì)算理論上來(lái)說(shuō)也是很困難的。任何對(duì)輸入消息的變動(dòng),都有很高的機(jī)率導(dǎo)致其產(chǎn)生的消息摘要迥異。
SHA加密原理
SHA-1是一種數(shù)據(jù)加密算法,該算法的思想是接收一段明文,然后以一種不可逆的方式將它轉(zhuǎn)換成一段(通常更?。┟芪模部梢院?jiǎn)單的理解為取一串輸入碼(稱為預(yù)映射或信息),并把它們轉(zhuǎn)化為長(zhǎng)度較短、位數(shù)固定的輸出序列即散列值(也稱為信息摘要或信息認(rèn)證代碼)的過(guò)程。
單向散列函數(shù)的安全性在于其產(chǎn)生散列值的操作過(guò)程具有較強(qiáng)的單向性。如果在輸入序列中嵌入密碼,那么任何人在不知道密碼的情況下都不能產(chǎn)生正確的散列值,從而保證了其安全性。SHA將輸入流按照每塊512位(64個(gè)字節(jié))進(jìn)行分塊,并產(chǎn)生20個(gè)字節(jié)的被稱為信息認(rèn)證代碼或信息摘要的輸出。
該算法輸入報(bào)文的長(zhǎng)度不限,產(chǎn)生的輸出是一個(gè)160位的報(bào)文摘要。輸入是按512 位的分組進(jìn)行處理的。SHA-1是不可逆的、防沖突,并具有良好的雪崩效應(yīng)。
通過(guò)散列算法可實(shí)現(xiàn)數(shù)字簽名實(shí)現(xiàn),數(shù)字簽名的原理是將要傳送的明文通過(guò)一種函數(shù)運(yùn)算(Hash)轉(zhuǎn)換成報(bào)文摘要(不同的明文對(duì)應(yīng)不同的報(bào)文摘要),報(bào)文摘要加密后與明文一起傳送給接受方,接受方將接受的明文產(chǎn)生新的報(bào)文摘要與發(fā)送方的發(fā)來(lái)報(bào)文摘要解密比較,比較結(jié)果一致表示明文未被改動(dòng),如果不一致表示明文已被篡改。
MAC (信息認(rèn)證代碼)就是一個(gè)散列結(jié)果,其中部分輸入信息是密碼,只有知道這個(gè)密碼的參與者才能再次計(jì)算和驗(yàn)證MAC碼的合法性。
SHA加密優(yōu)點(diǎn)
由于SHA也是有MD4演變過(guò)來(lái)的,所以其優(yōu)點(diǎn)與MD5大致一樣
•壓縮性:任意長(zhǎng)度的數(shù)據(jù),算出的SHA值長(zhǎng)度都是固定的。
•容易計(jì)算:從原數(shù)據(jù)計(jì)算出SHA值很容易。
•抗修改性:對(duì)原數(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)用場(chǎng)景
•一致性驗(yàn)證
•數(shù)字簽名
•安全訪問(wèn)認(rèn)證
SHA加密的簡(jiǎn)單實(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ī)變得越來(lái)越快和越來(lái)越廉價(jià),SHA-1算法的安全性也逐年降低,已被密碼學(xué)家嚴(yán)重質(zhì)疑,希望由安全強(qiáng)度更高的SHA-2替代它。
•SHA-224、SHA-256、SHA-384,和SHA-512并稱為SHA-2。
•新的散列函數(shù)并沒(méi)有接受像SHA-1一樣的公眾密碼社區(qū)做詳細(xì)的檢驗(yàn),所以它們的密碼安全性還不被大家廣泛的信任。
•雖然至今尚未出現(xiàn)對(duì)SHA-2有效的攻擊,它的算法跟SHA-1基本上仍然相似;因此有些人開(kāi)始發(fā)展其他替代的散列算法。
跨國(guó)公司事跡:
Google官方博客宣布,將在Chrome瀏覽器中逐漸降低SHA-1證書(shū)的安全指示。但有意思的是Google.com目前使用的也是SHA-1簽名的證書(shū),但證書(shū)將在3個(gè)月內(nèi)過(guò)期,Google將從2015年起使用SHA-2簽名的證書(shū)。SHA-1算法目前尚未發(fā)現(xiàn)嚴(yán)重的弱點(diǎn),但偽造證書(shū)所需費(fèi)用正越來(lái)越低。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android Studio 3.0中mipmap-anydpi-v26是什么東東
在Android Studio 3.0中一旦我們創(chuàng)建了一個(gè)項(xiàng)目,一個(gè)名為mipmap-anydpi-v26自動(dòng)創(chuàng)建的文件夾在res文件夾下。它究竟能干什么?為什么我們需要這個(gè)?我們?cè)陂_(kāi)發(fā)時(shí)該如何利用它,下面通過(guò)本文給大家介紹下2017-12-12
Android自定義View實(shí)現(xiàn)旋轉(zhuǎn)的圓形圖片
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)旋轉(zhuǎn)的圓形圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
解決eclipse啟動(dòng)時(shí)報(bào)錯(cuò)Failed to create the Java Virtural Machine.問(wèn)題的
這篇文章主要介紹了解決eclipse啟動(dòng)時(shí)報(bào)Failed to create the Java Virtural Machine.問(wèn)題的方法,感興趣的小伙伴們可以參考一下2016-01-01
Android中檢測(cè)當(dāng)前是否為主線程最可靠的解決方法
這篇文章主要介紹了Android中檢測(cè)當(dāng)前是否為主線程最可靠的解決方法,本文先是給出了最可靠的方法,然后給出了幾個(gè)實(shí)驗(yàn)例子,需要的朋友可以參考下2015-01-01
Android Studio 3.0被調(diào)方法參數(shù)名提示的取消方法
這篇文章主要介紹了去掉android studio 3.0被調(diào)方法參數(shù)名提示的解決方法,在文章末尾給大家補(bǔ)充介紹了Android Studio 3.0 gradle提示太老的解決方法,非常不錯(cuò),需要的朋友可以參考下2017-11-11
android開(kāi)發(fā)環(huán)境遇到adt無(wú)法啟動(dòng)的問(wèn)題分析及解決方法
開(kāi)始研究android開(kāi)發(fā),搭建開(kāi)發(fā)環(huán)境的時(shí)候就出了問(wèn)題,真是束手無(wú)策2013-02-02
Android實(shí)現(xiàn)密碼明密文切換(小眼睛)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)密碼明密文切換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
Android 回調(diào)詳解及簡(jiǎn)單實(shí)例
這篇文章主要介紹了Android 回調(diào)詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-01-01

