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

java 实现md5加密

程序员文章站 2024-03-20 13:17:04
...

 java通用的md5加密算法

 

import java.security.MessageDigest;

public class MD5Util {
    public final static String MD5(String s) {
        char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};       

        try {
            byte[] btInput = s.getBytes();
            // 获得MD5摘要算法的 MessageDigest 对象
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            // 使用指定的字节更新摘要
            mdInst.update(btInput);
            // 获得密文
            byte[] md = mdInst.digest();
            // 把密文转换成十六进制的字符串形式
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static void main(String[] args) {
        System.out.println(MD5Util.MD5("20121221"));
        System.out.println(MD5Util.MD5("加密"));
    }
}

 

下面的内容来至于http://hi.baidu.com/java2013/item/c5ec48d4e949e70cd90e44c7

 

 1、使用了sun.misc.BASE64Encoder类来对密码进行MD5加密

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import sun.misc.BASE64Encoder;

public class MD5DigestUtil {

    publicstatic String EncoderPwdByMd5(String password) 
		throwsNoSuchAlgorithmException, UnsupportedEncodingException {
        // 确定计算方法
        MessageDigestmd5 = MessageDigest.getInstance("MD5");
        //这里使用sun的未公开的sun.misc.BASE64Encoder类
        BASE64Encoder base64en = new BASE64Encoder();
       // 加密后的字符串
        // 说明:MD5加密后的字节数组,再使用base64对其进行编码
       String newstr = base64en.encode(md5.digest(password.getBytes("utf-8")));
       return newstr;
    }
}

import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
public class MD5Digest {
    publicstatic void main(String[] args) throws NoSuchAlgorithmException,UnsupportedEncodingException {    
    String password = "1234";
    System.out.println("加密前,password= " + password);
    String encodedPassword = MD5DigestUtil.EncoderPwdByMd5(password);
    System.out.println("加密后,password= " + encodedPassword);
    }    

}

 这个类是sun未对外公开的类,在java API文档中,我们找不到这个类的说明文档。在Oracle的官方网站对这个类有说明,指出sun.*包中的类是sun内部使用的类,并不对外公开,在未来的版本中,也许会有变化,比如移到正式发行的包中,或者甚至有可能废弃不用,这都将给现在使用这个类的程序带来不稳定性。因此Oracle官方的建议是不要使用这个类,建议使用第三方提供的,比如Apache的类。

 

2  使用Apache的Base64编码类
Apache提供的有对字节数组进行Base64编码的类org.apache.commons.codec.binaryBase64。这个类提供有许多静态方法用来进行编码和解码。
在使用这个类之前,首先要到Apache官方网站上下载commons-codec-1.6.jar包,并将这个包导入到类的构建路径中。
下面是改写过后的MD5DigestUtil.java类的代码:

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.codec.binary;

public class MD5DigestUtil {
	publicstatic String EncoderPwdByMd5(String password) 
		throwsNoSuchAlgorithmException, UnsupportedEncodingException {
        // 确定计算方法
		MessageDigest md5 = MessageDigest.getInstance("MD5");
        // 加密后的字符串
        // 说明:MD5加密后的字节数组,再使用base64对其进行编码
        String newstr = Base64.encodeBase64String(md5.digest(password.getBytes("utf-8")));
		return newstr;
    }
}

 

 

3  使用Apache的DigestUtils加密算法类
Apache提供的有MD5、SHA等加密算法的类org.apache.commons.codec.digest.DigestUtils。这个类提供有许多静态方法用来进行加密。
在使用这个类之前,首先要到Apache官方网站上下载commons-codec-1.6.jar包,并将这个包导入到类的构建路径中。
下面是改写过后的使用org.apache.commons.codec.digest.DigestUtils类的MD5DigestUtil.java类的代码:

package com.xuejava;
import org.apache.commons.codec.digest.DigestUtils;
public class MD5DigestUtil {
	publicstatic String EncoderPwdByApacheMd5(String password){
       return DigestUtils.md5Hex(password);
    }  
}