java 实现md5加密

 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);
    }  
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值