1. 程式人生 > >java中字串 MD5密碼的加密與驗證

java中字串 MD5密碼的加密與驗證

 MD5即Message-Digest Algorithm 5(資訊-摘要演算法 5),用於確保資訊傳輸完整一致。是計算機廣泛使用的雜湊演算法之一(又譯摘要演算法、雜湊演算法),主流程式語言普遍已有MD5實現。

   將資料(如漢字)運算為另一固定長度值是雜湊演算法的基礎原理,MD5的前身有MD2、MD3MD4

        本例項介紹用MD5進行加密和驗證,將輸入字串通過MD5加密成另一個字串,而且根據新的字串無法獲得原字串,但可以在不知道原始密碼的情況下進行密碼驗證。

關鍵技術:

*通過java.security.MessageDigest的靜態方法getInstance建立具有指定演算法名稱的資訊摘要,引數為演算法名,傳入“MD5”則表示將使用MD5演算法。

*MessageDigest的digest例項方法使用指定的位元組陣列對摘要進行最後更新,然後完成摘要計算,返回存放雜湊值結果的季節陣列,這個陣列就是MD5加密產品。

*將加密後的位元組陣列轉換成十六進位制的字元竄,形成最終的密碼。

*當輸入字串經過MD5加密後,得到的字串與密碼一樣,則認為密碼驗證通過。

例項演示:

 1import java.security.MessageDigest;  
 2
 3  
 4publicclass Password {  
 5    //16進位制下數字到字元的對映陣列    6privatestatic String[] hexDigits =new String[]
{"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};  
 7  
 8    //將inputstr加密    9publicstatic String createPassword(String inputstr)  
10    {  
11        return encodeByMD5(inputstr);  
12    }
13  
14    //驗證密碼是否正確   15publicstaticboolean authenticatePassword(String pass , String inputstr)  
16
    {  
17        if(pass.equals((encodeByMD5(inputstr))))  
18        {  
19            returntrue;  
20        }
21         else22         {  
23             returnfalse;  
24         }
25     }
26     //對字串進行MD5編碼   27privatestatic String encodeByMD5(String originstr)  
28     {  
29         if(originstr !=null)  
30         {  
31             try{  
32                 //建立具有指定演算法名稱的資訊摘要   33                 MessageDigest md = MessageDigest.getInstance("MD5");  
34                 //使用指定的位元組陣列對摘要進行最後的更新,然後完成摘要計算   35byte[] results = md.digest(originstr.getBytes());  
36                  //將得到的位元組陣列程式設計字串返回   37                 String resultString = byteArrayToHexString(results);  
38                 return resultString.toUpperCase();  
39             }
catch(Exception ex){  
40                 ex.printStackTrace();  
41             }
42         }
43        returnnull;  
44     }
45     //轉換位元組陣列為十六進位制字串   46privatestatic String byteArrayToHexString(byte[] b)  
47    {  
48        StringBuffer resultsb =new StringBuffer();  
49        int i=0;  
50        for(i=0;i<b.length;i++)  
51        {  
52            resultsb.append(byteToHexString(b[i]));  
53        }
54        return resultsb.toString();  
55    }
56    //將位元組轉化成十六進位制的字串   57privatestatic String byteToHexString(byte b)  
58    {  
59        
60       int n=b;  
61       if(n<0)  
62        {  
63            n =256+ n;  
64        }
65        int d1 = n /16;  
66        int d2 = n /16;  
67        return hexDigits[d1]+hexDigits[d2];  
68    }
69  
70    publicstaticvoid main(String[] args)  
71    {  
72        String password = Password.createPassword("123456");  
73        System.out.println("對123456用MD5加密後:"+password);  
74        String inputstr ="1234";  
75        System.out.println("1234與密碼相同?"+Password.authenticatePassword(password, inputstr));  
76        inputstr ="123456";  
77        System.out.println("123456與密碼相同?"+Password.authenticatePassword(password, inputstr));  
78    }
79}