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

转载自:http://www.cnblogs.com/yangw/p/5830892.html

package com.bstek.tools;

import java.io.FileInputStream;

import java.io.IOException;

import java.security.DigestInputStream;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

/**

* Md5

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

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

*

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

*/

public class Md5Utils {

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, int n) {

StringBuffer stringbuffer = new StringBuffer(2 * n);

int k = m + n;

for (int l = m; l < k; l++) {

appendHexPair(bytes[l], stringbuffer);

}

return stringbuffer.toString();

}

private static void appendHexPair(byte bt, StringBuffer stringbuffer) {

char c0 = hexDigits[(bt & 0xf0) >> 4];

char c1 = hexDigits[bt & 0xf];

stringbuffer.append(c0);

stringbuffer.append(c1);

}

private static String bufferToHex(byte bytes[]) {

return bufferToHex(bytes, 0, bytes.length);

}

/**

* 字符串的md5加密

* @param input

* @return

*/

public static String stringMD5(String input) {

// 输入的字符串转换成字节数组

byte[] inputByteArray = input.getBytes();

// inputByteArray是输入字符串转换得到的字节数组

messageDigest.update(inputByteArray);

// 转换并返回结果,也是字节数组,包含16个元素

byte[] resultByteArray = messageDigest.digest();

// 字符数组转换成字符串返回

return bufferToHex(resultByteArray);

}

/**

* 文件的md5加密

* @param inputFile

* @return

* @throws IOException

*/

public static String fileMD5(String inputFile) throws IOException {

// 缓冲区大小(这个可以抽出一个参数)

int bufferSize = 256 * 1024;

FileInputStream fileInputStream = null;

DigestInputStream digestInputStream = null;

try {

// 使用DigestInputStream

fileInputStream = new FileInputStream(inputFile);

digestInputStream = new DigestInputStream(fileInputStream,messageDigest);

// read的过程中进行MD5处理,直到读完文件

byte[] buffer =new byte[bufferSize];

while (digestInputStream.read(buffer) > 0);

// 获取最终的MessageDigest

messageDigest= digestInputStream.getMessageDigest();

// 拿到结果,也是字节数组,包含16个元素

byte[] resultByteArray = messageDigest.digest();

// 同样,把字节数组转换成字符串

return bufferToHex(resultByteArray);

} finally {

try {

digestInputStream.close();

} catch (Exception e) {

}

try {

fileInputStream.close();

} catch (Exception e) {

}

}

}

/**

* @param args

*/

public static void main(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

*/

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值