java md5 文件加密_Java实现MD5加密_字符串加密_文件加密

packagecom.bstek.tools;importjava.io.FileInputStream;importjava.io.IOException;importjava.security.DigestInputStream;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;/*** Md5

* 提供对字符串的md5-->stringMD5

* 提供对文件的Md5-->fileMD5

*

* 对于大文件,可以使用DigestInputStream*/

public classMd5Utils {protected static char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};protected static MessageDigest messageDigest = null;static{try{//拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)

messageDigest = MessageDigest.getInstance("MD5");

}catch(NoSuchAlgorithmException e) {

System.err.println(Md5Utils.class.getName()+"初始化失败,MessageDigest不支持MD5Util.");

e.printStackTrace();

}

}private static String bufferToHex(byte bytes[], int m, intn) {

StringBuffer stringbuffer= new StringBuffer(2 *n);int k = m +n;for (int l = m; l < k; l++) {

appendHexPair(bytes[l], stringbuffer);

}returnstringbuffer.toString();

}private static void appendHexPair(bytebt, StringBuffer stringbuffer) {char c0 = hexDigits[(bt & 0xf0) >> 4];char c1 = hexDigits[bt & 0xf];

stringbuffer.append(c0);

stringbuffer.append(c1);

}private static String bufferToHex(bytebytes[]) {return bufferToHex(bytes, 0, bytes.length);

}/*** 字符串的md5加密

*@paraminput

*@return

*/

public staticString stringMD5(String input) {//输入的字符串转换成字节数组

byte[] inputByteArray =input.getBytes();//inputByteArray是输入字符串转换得到的字节数组

messageDigest.update(inputByteArray);//转换并返回结果,也是字节数组,包含16个元素

byte[] resultByteArray =messageDigest.digest();//字符数组转换成字符串返回

returnbufferToHex(resultByteArray);

}/*** 文件的md5加密

*@paraminputFile

*@return*@throwsIOException*/

public static String fileMD5(String inputFile) throwsIOException {//缓冲区大小(这个可以抽出一个参数)

int bufferSize = 256 * 1024;

FileInputStream fileInputStream= null;

DigestInputStream digestInputStream= null;try{//使用DigestInputStream

fileInputStream = newFileInputStream(inputFile);

digestInputStream= newDigestInputStream(fileInputStream,messageDigest);//read的过程中进行MD5处理,直到读完文件

byte[] buffer =new byte[bufferSize];while (digestInputStream.read(buffer) > 0);//获取最终的MessageDigest

messageDigest=digestInputStream.getMessageDigest();//拿到结果,也是字节数组,包含16个元素

byte[] resultByteArray =messageDigest.digest();//同样,把字节数组转换成字符串

returnbufferToHex(resultByteArray);

}finally{try{

digestInputStream.close();

}catch(Exception e) {

}try{

fileInputStream.close();

}catch(Exception e) {

}

}

}/***@paramargs*/

public static voidmain(String[] args) {//测试字符串MD5加密//123456: e10adc3949ba59abbe56e057f20f883e//eastcom: 6997c46956185a7c4d452646fc9c69e2

System.out.println(stringMD5("eastcom"));try{long startTime =System.currentTimeMillis();//测试文件MD5加密

String FilePath = "D:/ilink_ide.zip"; //4227e9fc4bd71ff34887d47867967b29

System.out.println(fileMD5(FilePath));long endTime =System.currentTimeMillis();

System.out.println((endTime- startTime)/1000);

}catch(IOException e) {

e.printStackTrace();

}

}/*** 参考文章:

*http://www.zhihu.com/question/23702510*http://blog.csdn.net/lf_software_studio/article/details/8025497*http://my.oschina.net/laigous/blog/106646*http://blog.csdn.net/wangqiuyun/article/details/22941433

*/}


版权声明:本文为weixin_33533854原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。