java获取文件MD5,获取字符串MD5
获取md5值4个步骤:
1.创建MessageDigest对象md5。
2.使用md的update(byte[] buffer)方法将数据更新到md5对象中。
3.使用md5的digest()方法获得摘要,该摘要是一个长度为16的数组。
4.将该摘要数组转换为32位的md5值.
【java获取文件MD5,获取字符串MD5】注意:如果要获得16位的md5值就是取32位的md5值的中间16位。可以使用subString(8,24)截取。
以下是获得文件和字符串md5的方法,去除main方法即可作为一个工具类。
package com.wenba1314.tools;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Tool {
private static MessageDigest md;
static {
try {
//初始化摘要对象
md = MessageDigest.getInstance("md5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
System.out.println(generateMD5ForString("test"));
System.out.println(generateMD5ForFile(new File("1.jpg")));
}
//获得字符串的md5值
public static String generateMD5ForString(String str){
//更新摘要数据
md.update(str.getBytes());
//生成摘要数组
byte[] digest = md.digest();
//清空摘要数据,以便下次使用
md.reset();
return formatByteArrayTOString(digest);
}
//获得文件的md5值
public static String generateMD5ForFile(File file) throws IOException {
//创建文件输入流
FileInputStream fis = new FileInputStream(file);
//将文件中的数据写入md对象
byte[] buffer = new byte[1024];
int len=-1;
while ((len = fis.read(buffer)) != -1) {
md.update(buffer, 0, len);
}
fis.close();
//生成摘要数组
byte[] digest = md.digest();
//清空摘要数据,以便下次使用
md.reset();
return formatByteArrayTOString(digest);
}
//将摘要字节数组转换为md5值
public static String formatByteArrayTOString(byte[] digest) {
//创建sb用于保存md5值
StringBuffer sb = new StringBuffer();
int temp;
for (int i=0;
i
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- django-前后端交互
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- java中如何实现重建二叉树
- 使用composer自动加载类文件
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组