JAVA中MD5散列表加密與Spring中MD5 SHA加密比較__JAVA

來源:互聯網
上載者:User

l MD5(Message Digest Algorithm 5):是RSA資料安全公司開發的一種單向散列演算法。

l SHA(Secure Hash Algorithm):可以對任意長度的資料運算產生一個160位的數值;

SHA-1

在1993年,安全散列演算法(SHA)由美國國家標準和技術協會(NIST)提出,並作為聯邦資訊處理標準(FIPS PUB 180)公布;1995年又發布了一個修訂版FIPS PUB 180-1,通常稱之為SHA-1。SHA-1是基於MD4演算法的,並且它的設計在很大程度上是模仿MD4的。現在已成為公認的最安全的散列演算法之一,並被廣泛使用。

 MD5 與SHA-1 的比較

因為二者均由MD4匯出,SHA-1和MD5彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:

l 對強行攻擊的安全性:最顯著和最重要的區別是SHA-1摘要比MD5摘要長32 位。使用強行技術,產生任何一個報文使其摘要等於給定報摘要的難度對MD5是2^128數量級的操作,而對SHA-1則是2^160數量級的操作。這樣,SHA-1對強行攻擊有更大的強度。

l 對密碼分析的安全性:由於MD5的設計,易受密碼分析的攻擊,SHA-1顯得不易受這樣的攻擊。

l 速度:在相同的硬體上,SHA-1的運行速度比MD5慢。


JAVA內建java.security.MessageDigest實現:

package com.redhamr.util;import java.io.*;import java.security.MessageDigest;public class HashCrypt { /***      * MD5加碼 產生32位md5碼      */      public static String string2MD5(String inStr){          MessageDigest md5 = null;          try{              md5 = MessageDigest.getInstance("MD5");          }catch (Exception e){              System.out.println(e.toString());              e.printStackTrace();              return "";          }          char[] charArray = inStr.toCharArray();          byte[] byteArray = new byte[charArray.length];            for (int i = 0; i < charArray.length; i++)              byteArray[i] = (byte) charArray[i];          byte[] md5Bytes = md5.digest(byteArray);          StringBuffer hexValue = new StringBuffer();          for (int i = 0; i < md5Bytes.length; i++){              int val = ((int) md5Bytes[i]) & 0xff;              if (val < 16)                  hexValue.append("0");              hexValue.append(Integer.toHexString(val));          }          return hexValue.toString();        }        /**      * 加密解密演算法 執行一次加密,兩次解密      */       public static String convertMD5(String inStr){            char[] a = inStr.toCharArray();          for (int i = 0; i < a.length; i++){              a[i] = (char) (a[i] ^ 't');          }          String s = new String(a);          return s;        }        // 測試主函數      public static void main(String args[]) {          String s = new String("lcx123");          System.out.println("原始:" + s);          System.out.println("MD5後:" + string2MD5(s));          System.out.println("解密的:" + convertMD5(convertMD5(s)));      }  }

Spring中MD5是由org.springframework.security.authentication.encoding.Md5PasswordEncoder

而SHA是由org.springframework.security.authentication.encoding.ShaPasswordEncoder:

package com.esoft.core.util;import org.springframework.security.authentication.encoding.Md5PasswordEncoder;import org.springframework.security.authentication.encoding.PasswordEncoder;import org.springframework.security.authentication.encoding.ShaPasswordEncoder;public class HashCrypt {public static String SHA = "SHA";public static String MD5 = "MD5";private final static PasswordEncoder shaPasswordEncoder = new ShaPasswordEncoder();private final static PasswordEncoder md5PasswordEncoder = new Md5PasswordEncoder();public static String getDigestHash(String str) {return getDigestHash(str, "SHA");}public static String getDigestHash(String str, String hashType) {if (str == null)return null;return getDigestHash(str, hashType,null);}public static String getDigestHash(String str, String hashType,Object salt ) {if(hashType == null){hashType = SHA ;}if(hashType.equals(MD5)){return md5PasswordEncoder.encodePassword(str, salt);}return shaPasswordEncoder.encodePassword(str, salt);}public static void main(String[] args) {System.out.println( getDigestHash("jhsx128710104") );}}

Null 字元串:


sha("")= da39a3ee5e6b4b0d3255bfef95601890afd80709

md5("")=d41d8cd98f00b204e9800998ecf8427e



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.