(1)一般使用的數據庫中都會保存用戶名和密碼,其中密碼不使用明碼保存。
有時候用MD5密碼,很多語言都提供了將字符串生成為MD5密碼的方法或函數。MD5的加密算法是公開的。
有時候也可以用自己的字符串加密算法,這種加密算法是只有自己知道的。
(2)破解MD5的過程就是先算好大量或者所有可能的字符串的MD5數值,之后進行查詢就可以破解。雖然有些網站規定了密碼的位數在6~20位之間,但是要事先計算這么多是字符串并有效的組織存儲、查詢還是相當麻煩,相當慢的。
因為MD5的位數是固定的,比如16,32,64,而字符串的組合與長度是無窮盡的,這就有沖突啦。但是如果知道了加密前字符串的長度是有固定范圍的,比如6~20,這個還是可以破解的。
但是,如果不知道加密前字符的長度那么這就是無窮盡啦。貌似現在還沒有人能夠破解吧。
MD5密碼破解網站 :可以百度搜索“MD5解密”
(3)下面給出了一個java生成給定字符串的MD5密碼的模塊程序。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import java.security.MessageDigest; public class Md5Test { public void toMD5(String plainText) { try { //生成實現指定摘要算法的 MessageDigest 對象。 MessageDigest md = MessageDigest.getInstance( "MD5" ); //使用指定的字節數組更新摘要。 md.update(plainText.getBytes()); //通過執行諸如填充之類的最終操作完成哈希計算。 byte b[] = md.digest(); //生成具體的md5密碼到buf數組 int i; StringBuffer buf = new StringBuffer( "" ); for ( int offset = 0 ; offset < b.length; offset++) { i = b[offset]; if (i < 0 ) i += 256 ; if (i < 16 ) buf.append( "0" ); buf.append(Integer.toHexString(i)); } System.out.println( "32位: " + buf.toString()); // 32位的加密 System.out.println( "16位: " + buf.toString().substring( 8 , 24 )); // 16位的加密,其實就是32位加密后的截取 } catch (Exception e) { e.printStackTrace(); } } public static void main(String agrs[]) { new Md5Test().toMD5( "LXD" ); //加密LXD } } |