MD5加密代码(工具类)

时间:2022-04-27
本文章向大家介绍MD5加密代码(工具类),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
package com.test.system.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Arrays;

/**
 * 该类将通过MD5对用户所输入的密码进行加密
 * 
 * @author gulf
 * @version 1.0
 */
public class MD5Encrypt {
	/**
	 * 该方法实现MD5加密
	 * @param password
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static byte[] encryptByMD5(String password) throws NoSuchAlgorithmException {
		SecureRandom random = new SecureRandom();
		byte[] salt = new byte[12];
		byte[] encryptPassword = null;
		//生成12位的随机值
		random.nextBytes(salt);
		MessageDigest messageDigest = MessageDigest.getInstance("MD5");
		messageDigest.update(salt);
		messageDigest.update(password.getBytes());
		byte[] digest = messageDigest.digest();
		encryptPassword = new byte[digest.length + 12];
		System.arraycopy(salt, 0, encryptPassword, 0, 12);
		System.arraycopy(digest, 0, encryptPassword, 12, digest.length);
		return encryptPassword;
	}

	/**
	 * 该方法完成登录时密码的验证
	 * @param password
	 * @param encryptPassword
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static boolean validatePassword(String password, byte[] encryptPassword)
			throws NoSuchAlgorithmException {
		byte[] salt = new byte[12];
	 		System.arraycopy(encryptPassword, 0, salt, 0, 12);
		MessageDigest messageDigest = MessageDigest.getInstance("MD5");
		messageDigest.update(salt);
		messageDigest.update(password.getBytes());
		byte[] digest = messageDigest.digest();
		byte[] digestInDB = new byte[encryptPassword.length - 12];
		System.arraycopy(encryptPassword, 12, digestInDB, 0,
				encryptPassword.length - 12);
		if (Arrays.equals(digest, digestInDB)) {
			return true;
		} else {
			return false;
		}
	}
}