MD5加密

本文介绍了一个用于生成MD5散列值的Java类,包括字符串和文件的MD5计算方法。该类提供了md5s方法来计算给定字符串的MD5值,并通过getMD5方法计算文件的MD5散列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<span style="font-size:14px;">public class MD5 {
	/**
	 * 日志对象.
	 */
	private static Logger logger = Logger.getLogger(MD5.class);

	/**
	 * 私有构造函数.
	 */
	private MD5() {
	}

	/**
	 * 返回plainText的MD5值.
	 * 
	 * @param plainText
	 *            一个需要MD5的字符串.
	 * @return 返回plainText的MD5值.
	 */
	public static String md5s(String plainText) {
		String result = null;

		if (plainText == null) {
			return null;
		}

		byte[] byteArray = null;
		byte b[] = null;
		int i;
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			byteArray = plainText.getBytes("GBK");
			md.update(byteArray);
			b = md.digest();

			StringBuffer buf = new StringBuffer("");
			for (int offset = 0; offset < b.length; offset++) {
				i = b[offset];
				if (i < 0) {
					i += 256;
				}
				if (i < 16) {
					buf.append("0");
				}
				buf.append(Integer.toHexString(i));
			}
			result = buf.toString();
		} catch (Exception e) {
			logger.error("MD5.MD5s error!", e);
		}

		return result;
	}

	/**
	 * 计算文件的MD5.
	 * 
	 * @param file
	 *            需要计算 MD5的File对象.
	 * @return 成功则 返回 MD5字符串, 失败返回 null.
	 */
	public static String getMD5(File file) {
		FileInputStream fis = null;
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			fis = new FileInputStream(file);
			byte[] buffer = new byte[8192];
			int length = -1;
			while ((length = fis.read(buffer)) != -1) {
				md.update(buffer, 0, length);
			}
			return bytesToString(md.digest());
		} catch (IOException ex) {
			logger.error("", ex);
			return null;
		} catch (NoSuchAlgorithmException ex) {
			logger.error("", ex);
			return null;
		} finally {
			try {
				fis.close();
			} catch (IOException ex) {
				logger.error("", ex);
			}
		}
	}

	/**
	 * 将byte[]转换成16进制字符串.
	 * 
	 * @param data
	 *            待转换byte[].
	 * @return byte[]转换成的16进制字符串.
	 */	
	public static String bytesToString(byte[] data) {
		if (data == null) {
			return "";
		}

		char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
				'a', 'b', 'c', 'd', 'e', 'f' };
		char[] temp = new char[data.length * 2];
		for (int i = 0; i < data.length; i++) {
			byte b = data[i];
			temp[i * 2] = hexDigits[b >>> 4 & 0x0f];
			temp[i * 2 + 1] = hexDigits[b & 0x0f];
		}
		
		return new String(temp);
	}
}</span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值