Android數據加密之SHA安全散列算法


前言:

       對於SHA安全散列算法,以前沒怎么使用過,僅僅是停留在聽說過的階段,今天在看圖片緩存框架Glide源碼時發現其緩存的Key采用的不是MD5加密算法,而是SHA-256加密算法,這才勾起了我的好奇心,所以趁着晚上沒啥事,來學習一下。

 

     其他幾種加密方式:

 

SHA加密算法

    SHA(Secure Hash Algorithm,安全散列算法),數字簽名等密碼學應用中重要的工具,被廣泛地應用於電子商務等信息安全領域。和MD5加密算法一樣,也是一種不可逆的加密算法,不過也可以通過窮舉法破解,但是SHA的破譯難度與成本要高於MD5,相對於MD5更加安全,現在已成為公認的最安全的散列算法之一,並被廣泛使用。主要包括SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512這幾種單向散列算法。SHA-1,SHA-224和SHA-256適用於長度不超過2^64二進制位的消息。SHA-384和SHA-512適用於長度不超過2^128二進制位的消息。官方解說如下:

  • 由消息摘要反推原輸入消息,從計算理論上來說是很困難的。

  • 想要找到兩組不同的消息對應到相同的消息摘要,從計算理論上來說也是很困難的。任何對輸入消息的變動,都有很高的機率導致其產生的消息摘要迥異。

SHA加密原理

     SHA-1是一種 數據加密算法,該算法的思想是接收一段明文,然后以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),並把它們轉化為長度較短、位數固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。
      單向散列函數的安全性在於其產生散列值的操作過程具有較強的單向性。如果在輸入序列中嵌入密碼,那么任何人在不知道密碼的情況下都不能產生正確的散列值,從而保證了其安全性。SHA將輸入流按照每塊512位(64個字節)進行分塊,並產生20個字節的被稱為信息認證代碼或信息摘要的輸出。
    該算法輸入 報文的長度不限,產生的輸出是一個160位的 報文摘要。輸入是按512 位的分組進行處理的。SHA-1是不可逆的、防沖突,並具有良好的雪崩效應。
通過散列算法可實現 數字簽名實現,數字簽名的原理是將要傳送的明文通過一種函數運算(Hash)轉換成報文摘要(不同的明文對應不同的報文摘要),報文摘要加密后與明文一起傳送給接受方,接受方將接受的明文產生新的報文摘要與發送方的發來報文摘要解密比較,比較結果一致表示明文未被改動,如果不一致表示明文已被篡改。
    MAC (信息認證代碼)就是一個散列結果,其中部分輸入信息是密碼,只有知道這個密碼的參與者才能再次計算和驗證MAC碼的合法性。

SHA加密優點

 由於SHA也是有MD4演變過來的,所以其優點與MD5大致一樣

  • 壓縮性:任意長度的數據,算出的SHA值長度都是固定的。

  • 容易計算:從原數據計算出SHA值很容易。

  • 抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所得到的SHA值都有很大區別。

  • 強抗碰撞:已知原數據和其SHA值,想找到一個具有相同SHA值的數據(即偽造數據)是非常困難的。

SHA應用場景

  • 一致性驗證

  • 數字簽名

  • 安全訪問認證

SHA加密的簡單實現

這里代碼演示以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在許多安全協議中廣為使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被視為是MD5(更早之前被廣為使用的散列函數)的后繼者。2005年,密碼學家就證明SHA-1的破解速度比預期提高了2000倍,雖然破解仍然是極其困難和昂貴的,但隨着計算機變得越來越快和越來越廉價,SHA-1算法的安全性也逐年降低,已被密碼學家嚴重質疑,希望由安全強度更高的SHA-2替代它。

  • SHA-224、SHA-256、SHA-384,和SHA-512並稱為SHA-2。

  • 新的散列函數並沒有接受像SHA-1一樣的公眾密碼社區做詳細的檢驗,所以它們的密碼安全性還不被大家廣泛的信任。

  • 雖然至今尚未出現對SHA-2有效的攻擊,它的算法跟SHA-1基本上仍然相似;因此有些人開始發展其他替代的散列算法。

跨國公司事跡:

  Google官方博客宣布,將在Chrome瀏覽器中逐漸降低SHA-1證書的安全指示。但有意思的是Google.com目前使用的也是SHA-1簽名的證書,但證書將在3個月內過期,Google將從2015年起使用SHA-2簽名的證書。SHA-1算法目前尚未發現嚴重的弱點,但偽造證書所需費用正越來越低。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM