MD5加密


MD5:一種哈希算法

 

實質上,MD5 只是一種哈希算法。

 

哈希算法,即 hash,又叫散列算法,是一類把任意數據轉換為定長(或限制長度)數據的算法統稱。例如我叫張三,你叫李四,那么「人 -> 人名」的算法就叫屬於一種哈希算法。哈希算法通常用於制作數字指紋,數字指紋的意思就是「你看到這個東西就像看到原數據一樣」,例如我們在一些網站下載大文件的時候,網站提供給我們驗證文件完整性的 MD5 或者 SHA1 碼,就是原文件的哈希值。哈希算法有很多種,MD5 是其中的一種,這就是 MD5。所以,優秀的哈希算法通常需要具有低碰撞概率(即不同數據的哈希值通常也不一樣)。

 

加密是什么?

 

加密,指的是對數據進行轉換以后,數據變成了另一種格式,並且除了拿到解密方法的人,沒人能把數據轉換回來。因此,加密通常用於網絡通信。因為網絡上的通信數據,任何人都有可能會拿到,把數據加密后再傳送,送達以后由對方解密后再查看,就可以防止網絡上的偷窺。例如大家都知道「安全」但很少人知道「為什么安全」的 HTTPS,就是通過加密算法來保障的網絡安全性。

 

所以,MD5 是加密嗎?

 

加密算法的目的,在於別人無法成功查看加密后的數據,並且在需要的時候還可以對數據進行解密來重新查看數據。而 MD5 算法是一種哈希算法,哈希算法的設計目標本身就決定了,它在大多數時候都是不可逆的,即你經過哈希算法得出的數據,無法再經過任何算法還原回去。所以,既然不能將數據還原,也就不能稱之為可以解密;既然不能解密,那么哈希的過程自然也就不能稱作是「加密」了。

 


1 加密方法:

1.1 java自帶jar工具MessageDigest實現 
java.security.MessageDigest

public class MD5Utils {
    public static String stringToMD5(String plainText) {
        byte[] secretBytes = null;
        try {
            secretBytes = MessageDigest.getInstance("md5").digest(
                    plainText.getBytes());
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("沒有這個md5算法!");
        }
        String md5code = new BigInteger(1, secretBytes).toString(16);
        for (int i = 0; i < 32 - md5code.length(); i++) {
            md5code = "0" + md5code;
        }
        return md5code;
    }

}

  

1.2 spring自帶的工具DigestUtils實現 
org.springframework.util.DigestUtils

DigestUtils.md5DigestAsHex("1234".getBytes())

  

2 使用方法:

@Test
public void testMd5() throws NoSuchAlgorithmException{
    MessageDigest md = MessageDigest.getInstance("MD5");
    // java自帶工具包MessageDigest  
    String resultString = MD5Utils.md5("123456");
    System.out.println(resultString);
    // e10adc3949ba59abbe56e057f20f883e
    String resultString1 = MD5Utils.md5("1234");
    System.out.println(resultString1);
    //81dc9bdb52d04dc20036dbd8313ed055

    // spring自帶工具包DigestUtils
    System.out.println(DigestUtils.md5DigestAsHex("1234".getBytes()));
    // 81dc9bdb52d04dc20036dbd8313ed055
}

  

 


免責聲明!

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



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