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

前言:

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

 

     其餘幾種加密方式:算法

 

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二進制位的消息。官方解說以下:工具

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

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

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-22四、SHA-25六、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算法目前還沒有發現嚴重的弱點,但僞造證書所需費用正愈來愈低。

相關文章
相關標籤/搜索