java中MD5加密


MD5將任意長度的"字節串"變換成一個128bit的大整數,並且它是一個不可逆的字符串變換算法,換句話說就是,即使你看到源程序和算法描述,也無法將一個MD5的值變換回原始的字符串,從數學原理上說,是因為原始的字符串有無窮多個,這有點象不存在反函數的數學函數。

MD5還廣泛用於加密和解密技術上,在很多操作系統中,用戶的密碼是以MD5值(或類似的其它算法)的方式保存的,用戶Login的時候,系統是把用戶輸入的密碼計算成MD5值,然后再去和系統中保存的MD5值進行比較,而系統並不"知道"用戶的密碼是什么。
一些黑客破獲這種密碼的方法是一種被稱為"跑字典"的方法。有兩種方法得到字典,一種是日常搜集的用做密碼的字符串表,另一種是用排列組合方法生成的,先用MD5程序計算出這些字典項的MD5值,然后再用目標的MD5值在這個字典中檢索。

public class Md5Test {
    public static void main(String[] args) {
        String s1 = "aaa";
        String s2 = "aaabbb";
        String s3 = "aaabbbccc";
        String s4 = "aaabbbccc";
        String s5 = "aaabbbccc";
        String s6 = "aaa@#Q!3";

        String res1 = DigestUtils.md5DigestAsHex(s1.getBytes());
        String res2 = DigestUtils.md5DigestAsHex(s2.getBytes());
        String res3 = DigestUtils.md5DigestAsHex(s3.getBytes());
        String res4 = DigestUtils.md5DigestAsHex(s4.getBytes());
        byte[] res5 = DigestUtils.md5Digest(s5.getBytes());
        String res6 = DigestUtils.md5DigestAsHex(s6.getBytes());
        System.out.println("res1:"+res1);
        System.out.println("res2:"+res2);
        System.out.println("res3:"+res3);
        System.out.println("res4:"+res4);
        System.out.println("res5:"+res5.toString());
        System.out.println("res6:"+res6);



    }
}
res1:47bce5c74f589f4867dbd57e9ca9f808
res2:6547436690a26a399603a7096e876a2d
res3:d1aaf4767a3c10a473407a4e47b02da6
res4:d1aaf4767a3c10a473407a4e47b02da6
res5:[B@10f87f48
res6:acb2e97d976f32b58caf093d42900792

對於res1,res2,res3解密網站很容易通過跑字典的形式獲得結果,但是對於res6這種復雜密碼,就很難通過跑字典獲取結果


免責聲明!

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



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