您的位置:首页 > 编程语言 > Java开发

Java实现MD5加密_字符串加密_文件加密

2016-09-01 18:17 417 查看
Java实现MD5加密,具体代码如下:

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 */

}


转载请注明出处...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: