首页 > 代码库 > Java利用MessageDigest进行MD5加密

Java利用MessageDigest进行MD5加密

MD5加密工具类:

package com.lijianbo.test;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.lang3.StringUtils;

/**
 * MD5加密算法工具类
 * @author bbo
 *
 */
public class MD5Utils {
	/*
	 * 为了提高安全性,我们又额外加了一串随机字符串
	 */
	private static final String USER_PWD_ENCP_PREFIX = "LDHDSFHWRERHESLM";

	/**
	 * 用户密码加密
	 * @param beforeEncp
	 * @return
	 */
	public static String encode(final String beforeEncp){
		if(StringUtils.isBlank(beforeEncp)){
			return beforeEncp;
		}
		return encryptMD5(USER_PWD_ENCP_PREFIX+beforeEncp);
	}
	
	/**
	 * md5加密
	 * @param strInput
	 * @return
	 */
	private static String encryptMD5(final String strInput) {
		StringBuffer buf = null;
		try {
			// 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)  
			MessageDigest md = MessageDigest.getInstance("MD5"); 
			// 输入的字符串转换成字节数组   
			md.update(strInput.getBytes());
			 // 转换并返回结果,也是字节数组,包含16个元素  
			byte b[] = md.digest();
			// new一个StringBuffer,这个就是用来组成结果字符串的(解释一下:一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方))  
			buf = new StringBuffer(b.length * 2);
			//遍历
			for (int i = 0; i < b.length; i++) {
				if (((int) b[i] & 0xff) < 0x10) { //(int) b[i] & 0xff 转换成无符号整型
					buf.append("0");
				}
				//Long.toHexString( 无符号长整数的十六进制字符串表示
				buf.append(Long.toHexString((int) b[i] & 0xff)); 
			}
		} catch (NoSuchAlgorithmException ex) {
			ex.printStackTrace();
		}
		return buf==null?null:buf.toString(); //返回加密后 的结果
	}
	
}

调用方式:

	String passwordMd5=MD5Utils.encode(password);				


生成第三方秘钥:

	public static void main(String[] args) {
		try {
			System.out.println(MD5Utils.encode("168544234123234192.168.12.10disanfangmiyao123456789012345", "GBK").length());;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}


本文出自 “JianBo” 博客,请务必保留此出处http://jianboli.blog.51cto.com/12075002/1886833

Java利用MessageDigest进行MD5加密