`

java MD5 工具类

阅读更多
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import org.apache.log4j.Logger;

public class MD5Util {
	private static Logger logger = Logger.getLogger(MD5Util.class);
	// 用来将字节转换成 16 进制表示的字符
	static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
			'9', 'a', 'b', 'c', 'd', 'e', 'f' };

	public static String getFileMD5(InputStream fis) {
			MessageDigest md = null;
			try {
				md = MessageDigest.getInstance("MD5");
			} catch (NoSuchAlgorithmException e) {
				e.printStackTrace();
			}

			byte[] buffer = new byte[2048];
			int length = -1;
			long s = System.currentTimeMillis();
			try {
				while ((length = fis.read(buffer)) != -1) {
					md.update(buffer, 0, length);
				}
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					fis.close();
				} catch (IOException ex) {
					ex.printStackTrace();
				}
			}
			System.err.println("last: " + (System.currentTimeMillis() - s));
			byte[] b = md.digest();
			return byteToHexStringSingle(b);
	}
	/**
	/**
	 * 对文件全文生成MD5摘要
	 * 
	 * @param file
	 *            要加密的文件
	 * @return MD5摘要码
	 * @throws FTPException 
	 */
	public static String getFileMD5(File file) {
		try {
			return getFileMD5(new FileInputStream(file));
		} catch (FileNotFoundException e) {
			logger.error(e.getMessage());
		} 
		return null;
	}

	/** */
	/**
	 * 对一段String生成MD5加密信息
	 * 
	 * @param message
	 *            要加密的String
	 * @return 生成的MD5信息
	 */
	public static String getMD5(String message) {
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			System.err.println("MD5摘要长度:" + md.getDigestLength());
			byte[] b = md.digest(message.getBytes("utf-8"));
			return byteToHexStringSingle(b);// byteToHexString(b);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return null;
	}

	@Deprecated
	/** */
	/** 
	 * 把byte[]数组转换成十六进制字符串表示形式 
	 * @param tmp    要转换的byte[] 
	 * @return 十六进制字符串表示形式 
	 */
	private static String byteToHexString(byte[] tmp) {
		String s;
		// 用字节表示就是 16 个字节
		char str[] = new char[16 * 2]; // 每个字节用 16 进制表示的话,使用两个字符,
		// 所以表示成 16 进制需要 32 个字符
		int k = 0; // 表示转换结果中对应的字符位置
		for (int i = 0; i < 16; i++) { // 从第一个字节开始,对 MD5 的每一个字节
			// 转换成 16 进制字符的转换
			byte byte0 = tmp[i]; // 取第 i 个字节
			str[k++] = hexDigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换,
			// >>> 为逻辑右移,将符号位一起右移
			str[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换
		}
		s = new String(str); // 换后的结果转换为字符串
		return s;
	}

	/**
	 * 独立把byte[]数组转换成十六进制字符串表示形式
	 * 
	 * @author Bill
	 * @create 2010-2-24 下午03:26:53
	 * @since
	 * @param byteArray
	 * @return
	 */
	public static String byteToHexStringSingle(byte[] byteArray) {
		StringBuffer md5StrBuff = new StringBuffer();

		for (int i = 0; i < byteArray.length; i++) {
			if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
				md5StrBuff.append("0").append(
						Integer.toHexString(0xFF & byteArray[i]));
			else
				md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
		}

		return md5StrBuff.toString();
	}
}
 
分享到:
评论
1 楼 bluestome 2012-03-30  
谢谢分享!

相关推荐

    java MD5加密工具类

    以下是一个简单的Java MD5加密工具类示例: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Util { private static final String MD5 = "MD5"; ...

    Java MD5加密工具类(支持多参数输入)

    Java工具类,它不仅实现了MD5加密,更创新性地接纳String... inputStrs,让你能一次性加密多个字符串。 1. 一键加密,多值无忧 告别繁杂,拥抱简洁。我们的Java MD5加密工具类以String... inputStrs为武器,打破了...

    Java Md5加密工具类

    Java Md5加密工具类

    JAVA的MD5工具类

    JAVA的MD5工具类

    MD5Utils.java

    MD5Utils .java MD5工具类

    简单的JAVA-MD5工具类

    Java编写的简单MD5工具类,用于登录校验、注册等功能模块中。

    Java MD5 加密工具类

    Java MD5加密工具类,MD5 Message-Digest Algorithm MD5信息摘要算法,一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

    Java_MD5加密工具类

    ### Java_MD5加密工具类详解 #### 一、概述 在信息安全领域,数据加密是确保数据安全的重要手段之一。MD5(Message-Digest Algorithm 5)作为一种常用的散列算法,在许多场景下被用来生成固定长度的摘要信息。本文...

    MD5加密的工具类,可直接使用

    这是一个Java的工具类,进行加密操作的时候调用该类的方法就可以,工具类里面写了一个main,拿啦直接用就行。

    MD5工具类 (MD5加密工具类)

    在Java编程中,MD5工具类(如提供的`Md5Util.java`)是用于简化MD5加密过程的实用程序。以下是一些关于MD5工具类的关键知识点: 1. **MD5原理**:MD5算法基于信息摘要理论,它通过特定的数学运算对输入数据进行处理...

    MD5工具类,+数据加密

    MD5工具类在Java中的实现主要依赖于`java.security.MessageDigest`类。这个类提供了各种摘要算法的实例,包括MD5。下面我们将详细介绍如何创建一个简单的MD5工具类,并讨论其在数据加密中的应用。 首先,我们需要...

    MD5工具类(可设置编码和指定长度)

    - `MD5(请删除括号内容-可生成指定长度).java`:这个文件中的MD5工具类可能有额外的功能,可以生成指定长度的MD5摘要。通常MD5摘要的长度是固定的32位(16字节),但可能通过某种方式(如填充、截断或添加前缀/...

    MD5加密工具类

    MD5加密算法,主要对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。

    java加密工具类 md5 aes base64 urlencode

    加密工具类 包含md5加密 base加密解密 md5加密 aes加密解密 urlencoude

    MD5加密,java String 转变成MD5 String 详细代码,工具类Android开发必备

    MD5加密,java String 转变成MD5 String 详细代码,工具类Android开发必备

    MD5加密+签名算法Sign生成 工具类

    为了更好地理解和使用这个工具类,你需要了解基本的MD5和签名算法原理,并熟悉如何在代码中调用这些工具类的方法。同时,注意MD5虽然快速但已不再被视为安全的哈希算法,因为它容易产生碰撞,不适合用于存储敏感信息...

    java中md5加密工具类

    private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", ... String result = MD5Util.MD5Encode("密码", "UTF-8"); System.out.println("result="+result); }

    java md5加密工具类

    java md5加密工具类

Global site tag (gtag.js) - Google Analytics