【轉】Java生成對應字符串的MD5密碼模塊


原文網址:http://www.cnblogs.com/xudong-bupt/archive/2013/05/10/3070899.html

 (1)一般使用的數據庫中都會保存用戶名和密碼,其中密碼不使用明碼保存。

      有時候用MD5密碼,很多語言都提供了將字符串生成為MD5密碼的方法或函數。MD5的加密算法是公開的。

      有時候也可以用自己的字符串加密算法,這種加密算法是只有自己知道的。

  (2)破解MD5的過程就是先算好大量或者所有可能的字符串的MD5數值,之后進行查詢就可以破解。雖然有些網站規定了密碼的位數在6~20位之間,但是要事先計算這么多是字符串並有效的組織存儲、查詢還是相當麻煩,相當慢的。

    因為MD5的位數是固定的,比如16,32,64,而字符串的組合與長度是無窮盡的,這就有沖突啦。但是如果知道了加密前字符串的長度是有固定范圍的,比如6~20,這個還是可以破解的。

   但是,如果不知道加密前字符的長度那么這就是無窮盡啦。貌似現在還沒有人能夠破解吧。

       MD5密碼破解網站 :http://www.cmd5.com/

  (3)下面給出了一個java生成給定字符串的MD5密碼的模塊程序。

復制代碼
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
     }
}
復制代碼


免責聲明!

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



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