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

内容摘要算法辅助类,可对byte\[\]、String、InputStream、File类型的数据进行MD5/SHA等方式的运算,从而得到具有代表性的Hash值。可用于计算文件指纹、密码加密、内容校验等功能。 提示:将无限集映射到有限集,一定存在碰撞的可能,只是概率很小而已。 JavaWeb工具类目录 [http://baike.xsoftlab.net/view/1059.html](http://baike.xsoftlab.net/view/1059.html) 源码: ```java 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") );     } } ```