Java MD5加密


 

MD5加密很常用,比如數據庫中密碼等敏感字段需要加密存儲,核對密碼時先以同樣的方式對用戶輸入的密碼進行加密,再與數據庫中存儲的密碼比較。

MD5加密有很多種實現方式,此處介紹2種。

 

 

1、使用JDK自帶MessageDigest

public class MD5Util {
    
    public static String getMD5Str(String str) {
        byte[] digest = null;
        try {
            MessageDigest md5 = MessageDigest.getInstance("md5");
            digest  = md5.digest(str.getBytes("utf-8"));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        //16是表示轉換為16進制數
        String md5Str = new BigInteger(1, digest).toString(16);
        return md5Str;
    }

}

 

 

2、使用Spring自帶的DigestUtils

上面是自己封裝,太麻煩,Spring已經給我們封裝好了。

String md5Str = DigestUtils.md5DigestAsHex("原串".getBytes());

 

 

說明

只使用md5加密是不行的,很容易被破解。常見的做法有:

  • 先對原串進行一些處理,比如先給它拼接一個字符串常量,再進行md5加密。即使對方解密,也獲取不到原串。
  • 使用多種加密算法。比如先用md5加密,再對加密的結果使用其它加密算法進行加密。比如先使用md5加密,對加密的結果再次使用md5加密。

這2種方式方式經常一起使用。

 

 

第一種確實有問題,我測試了幾百萬個數據,不符合的數據加密后長度集中在29、30、31,

這幾百萬個數據中沒有出現大於32的,數據庫字段長度設置為32字符,能存儲得下,依然可以使用,只不過數據長度不一定是32位。

 

第二種加密后是32位的,無論是性能、可靠性、編碼量都比其它方式優異,推薦

 


免責聲明!

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



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