Java生成对应字符串的MD5密码模块分析

熊孩纸 阅读:155 2020-10-18 22:09:48 评论:0

  (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 
     } 
}
标签:java
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
排行榜
关注我们

扫一扫关注我们,了解最新精彩内容