内容摘要算法辅助类:DigestHelper.java

概要:

内容摘要算法辅助类,可对byte[]、String、InputStream、File类型的数据进行MD5/SHA等方式的运算,从而得到具有代表性的Hash值。可用于计算文件指纹、密码加密、内容校验等功能。

| |目录

内容摘要算法辅助类,可对byte[]、String、InputStream、File类型的数据进行MD5/SHA等方式的运算,从而得到具有代表性的Hash值。可用于计算文件指纹、密码加密、内容校验等功能。


提示:将无限集映射到有限集,一定存在碰撞的可能,只是概率很小而已。


JavaWeb工具类目录 http://baike.xsoftlab.net/view/1059.html


源码:

package com.zhenzhigu.commons.util;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 内容摘要算法辅助类
 * 数据类型:byte[]、String、InputStream、File
 * 常用算法:MD2、MD5、SHA、SHA-1、SHA-256、SHA-384、SHA-512
 * @author Master.Xia
 * @version 1.1 Date:2017年2月9日
 */
public class DigestHelper {

	public static final String MD2 = "MD2";
	public static final String MD5 = "MD5";
	public static final String SHA1 = "SHA-1";
	public static final String SHA256 = "SHA-256";
	public static final String SHA384 = "SHA-384";
	public static final String SHA512 = "SHA-512";
	
	
	/**
	 * 将字节数组换成16进制的字符串
	 * @param byteArray
	 * @return
	 */
	public static String byteArrayToHex(byte[] byteArray) {
		StringBuilder sb = new StringBuilder();
		for (int n=0; n < byteArray.length; n++) {
			int v = byteArray[n];
			if (v < 0)v += 256;
			if (v < 16) sb.append(0);
			sb.append(Integer.toHexString(v));
		}
		return sb.toString();
	}
	public static String digest(int bufferSize,InputStream input,String algorithm) throws IOException{
		try {
			// 获取转换器实例
			MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
			// read的过程中进行MD5处理,直到读完文件
			byte[] buffer = new byte[bufferSize];
			for(int len;(len = input.read(buffer)) != -1;) {
				messageDigest.update(buffer, 0, len);
	        }
			// 拿到结果,也是字节数组,包含16个元素
			byte[] resultByteArray = messageDigest.digest();
			// 把字节数组转换成字符串
			return byteArrayToHex(resultByteArray);
		} catch (NoSuchAlgorithmException e) {
			return null;
		} finally {
			try {input.close();} catch (Exception e) {}
		}
	}
	public static String digest(InputStream input,String algorithm) throws IOException{
		return digest(1024*512, input, algorithm);
	}
	public static String digest(byte[] bytes,String algorithm) throws IOException{
		return digest(new ByteArrayInputStream(bytes), algorithm);
	}
	public static String digest(String text,String algorithm) throws IOException{
		return digest(text.getBytes(), algorithm);
	}
	public static String digest(File file,String algorithm) throws IOException{
		return digest(new FileInputStream(file), algorithm);
	}
	
	public static void main(String[] args) throws IOException, InterruptedException {
		System.out.println( digest("海思教育", "MD5") );
		System.out.println( digest("海思教育", "SHA") );
		System.out.println( digest("海思教育", "SHA1") );
		System.out.println( digest("海思教育", "SHA-256") );
		System.out.println( digest("海思教育", "SHA-384") );
		System.out.println( digest("海思教育", "SHA-512") );
	}
}


评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
资料加载中...
已关注 , 取消