欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java生成MD5加密字符串代码实例

程序员文章站 2024-03-31 18:06:40
      (1)一般使用的数据库中都会保存用户名和密码,其中密码不使用明码保存。     &nbs...

      (1)一般使用的数据库中都会保存用户名和密码,其中密码不使用明码保存。

      有时候用md5密码,很多语言都提供了将字符串生成为md5密码的方法或函数。md5的加密算法是公开的。

      有时候也可以用自己的字符串加密算法,这种加密算法是只有自己知道的。

  (2)破解md5的过程就是先算好大量或者所有可能的字符串的md5数值,之后进行查询就可以破解。虽然有些网站规定了密码的位数在6~20位之间,但是要事先计算这么多是字符串并有效的组织存储、查询还是相当麻烦,相当慢的。

    因为md5的位数是固定的,比如16,32,64,而字符串的组合与长度是无穷尽的,这就有冲突啦。但是如果知道了加密前字符串的长度是有固定范围的,比如6~20,这个还是可以破解的。

   但是,如果不知道加密前字符的长度那么这就是无穷尽啦。貌似现在还没有人能够破解吧。

       md5密码破解网站 :可以百度搜索“md5解密

  (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
  }
}

ps:这里再为大家提供2款md5加密工具,感兴趣的朋友可以参考一下:

md5在线加密工具:

http://tools.jb51.net/password/createmd5password

在线md5/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160加密工具: