当前位置 : 主页 > 编程语言 > java >

MD5加密工具类

来源:互联网 收集:自由互联 发布时间:2021-06-28
MD5Util.java import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MD5Util{/** * * @param 待加密的字符串 * @return 32位加密后的字符串 */public static String encrypting(String psw){Strin
MD5Util.java
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Util
{
	/**
	 * 
	 * @param  待加密的字符串
	 * @return 32位加密后的字符串
	 */
	public static String encrypting(String psw)
	{
		String cipherString = "";
		try {
			// 创建加密对象
			MessageDigest md = MessageDigest.getInstance("MD5");
			// 调用加密对象的方法,加密的动作已经完成
			byte[] cipherBytes = md.digest(psw.getBytes());
			for (byte b : cipherBytes)
			{
				// 第一步,将数据全部转换成正数:
				// 解释:为什么采用b&255
				/*
				 * b:它本来是一个byte类型的数据(1个字节) 255:是一个int类型的数据(4个字节)
				 * byte类型的数据与int类型的数据进行运算,会自动类型提升为int类型 eg: b: 1001 1100(原始数据)
				 * 运算时: b: 0000 0000 0000 0000 0000 0000 1001 1100 255: 0000
				 * 0000 0000 0000 0000 0000 1111 1111 结果:0000 0000 0000 0000
				 * 0000 0000 1001 1100 此时的temp是一个int类型的整数
				 */
				int tmp = b & 255;
				// 第二步,将所有的数据转换成16进制的形式
				// 注意:转换的时候注意if正数>=0&&<16,那么如果使用Integer.toHexString(),可能会造成缺少位数
				// 因此,需要对temp进行判断
				if (tmp >=0 && tmp < 16) {
					// 手动补上一个“0”
					cipherString = cipherString + "0" + Integer.toHexString(tmp);
				} else {
					cipherString = cipherString + Integer.toHexString(tmp);
				}
			}
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		return cipherString;
	}
}
网友评论