-
2021-02-28 14:06:45
我正在使用Java为某些文件生成MD5哈希。我需要为多个文件生成一个MD5,总大小约为1 GB。这是我的代码:
private String generateMD5(SequenceInputStream inputStream){
if(inputStream==null){
return null;
}
MessageDigest md;
try {
int read =0;
byte[] buf = new byte[2048];
md = MessageDigest.getInstance("MD5");
while((read = inputStream.read(buf))>0){
md.update(buf,0,read);
}
byte[] hashValue = md.digest();
return new String(hashValue);
} catch (NoSuchAlgorithmException e) {
return null;
} catch (IOException e) {
return null;
}finally{
try {
if(inputStream!=null)inputStream.close();
} catch (IOException e) {
// ...
}
}
}
这似乎永远存在。如何提高效率?
更多相关内容 -
JAVA 生成文件的MD5码
2019-08-03 01:17:22NULL 博文链接:https://kanpiaoxue.iteye.com/blog/1669100 -
Java生成文件的md5文件方法的代码
2019-09-06 11:23:02package pri.liyang.util; import java.io.*; import java.security.MessageDigest; import java.security....* 根据文件生成MD5码的工具类 * Author:李小白 */ public class MD5Util { /** ...package pri.liyang.util;
import java.io.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;/**
* 根据文件生成MD5码的工具类
* Author:李小白
*/
public class MD5Util {/**
* 辅助方法
* @param filename
* @return
*/
private static byte[] createChecksum(String filename) {
InputStream fis = null;
try {
fis = new FileInputStream(filename);
byte[] buffer = new byte[1024];
MessageDigest complete = MessageDigest.getInstance("MD5");
int numRead = -1;while ((numRead = fis.read(buffer)) != -1) {
complete.update(buffer, 0, numRead);
}
return complete.digest();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (null != fis) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;}
/**
* 生成文件的MD5码
* @param filePath 文件路径
* @return 该文件的MD5码
*/
private static String generateMD5(String filePath){
if (!new File(filePath).isFile()) {
System.err.println("Error: " + filePath
+ " is not a valid file.");
return null;
}
byte[] b = createChecksum(filePath);
if(null == b){
System.err.println(("Error:create md5 string failure!"));
return null;
}
StringBuilder result = new StringBuilder();for (int i = 0; i < b.length; i++) {
result.append(Integer.toString((b[i] & 0xff) + 0x100, 16)
.substring(1));
}
return result.toString();
}/**
* 根据文件,在同一文件夹下生成相应的MD5文件,文件名相同,仅后缀名不同
* 比如文件为helloworld.txt,生成MD5文件:helloworld.md5
* @param filePath 文件绝对路径
*/
public static void generateMD5File(String filePath) throws IOException {
//获得该文件实例
File file = new File(filePath);//获得该文件的MD5码
String md5code = generateMD5(filePath);//获得该文件的文件夹路径
String directoryPath = file.getParentFile().getAbsolutePath();//生成该文件对应的MD5文件的文件名
String md5FileName = file.getName().substring(0, file.getName().lastIndexOf(".")) + ".md5";//获得该文件对应的MD5文件的绝对路径
String md5FilePath = directoryPath + File.separator + md5FileName;//生成MD5文件
File md5File = new File(md5FilePath);
if(!md5File.exists()){
md5File.createNewFile();
}//文件写入MD5码的FileWriter类
FileWriter fileWriter = new FileWriter(md5File);
//将MD5码写入到MD5文件中
fileWriter.write(md5code);
//刷新流
fileWriter.flush();
//关流
fileWriter.close();//打印提示信息
System.out.println("创建MD5文件成功:" + md5FilePath);
}
/**
* 输入文件夹名称,将该文件夹下所有的文件都生成同名的MD5文件
* @param directoryPath
*/
public static void generateMD5Files(String directoryPath) throws IOException {
//创建文件夹实例
File directory = new File(directoryPath);
//文件数组
File[] files = null;if(directory.isDirectory()){
//获得所有文件
files = directory.listFiles();
//分别为每一个文件创建MD5文件
for(int i=0; i<files.length; i++){
generateMD5File(files[i].getAbsolutePath());
}
}else{
System.err.println("不是文件夹,请检查路径!");
return;
}}
/**
* 测试类
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//输入文件的绝对路径,生成该文件同一文件夹下的相同文件名,后缀名为.md5的文件
generateMD5File("C:\\Users\\李小白\\Desktop\\MD5\\helloworld.txt");//输入文件夹的绝对路径,生成该文件夹下所有文件的MD5文件,该文件夹的文件数多一倍
generateMD5Files("C:\\Users\\李小白\\Desktop\\MD5");
}}
本文链接:https://blog.csdn.net/weixin_39448458/article/details/81485522 -
Util: Java生成文件的md5文件方法的代码
2018-08-07 17:38:43package pri.liyang.util; import java.io.*; import java.security.MessageDigest; import java.security.... * 根据文件生成MD5码的工具类 * Author:李小白 */ public class MD5Util { /*...package pri.liyang.util; import java.io.*; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * 根据文件生成MD5码的工具类 * Author:李小白 */ public class MD5Util { /** * 辅助方法 * @param filename * @return */ private static byte[] createChecksum(String filename) { InputStream fis = null; try { fis = new FileInputStream(filename); byte[] buffer = new byte[1024]; MessageDigest complete = MessageDigest.getInstance("MD5"); int numRead = -1; while ((numRead = fis.read(buffer)) != -1) { complete.update(buffer, 0, numRead); } return complete.digest(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (null != fis) { fis.close(); } } catch (IOException e) { e.printStackTrace(); } } return null; } /** * 生成文件的MD5码 * @param filePath 文件路径 * @return 该文件的MD5码 */ private static String generateMD5(String filePath){ if (!new File(filePath).isFile()) { System.err.println("Error: " + filePath + " is not a valid file."); return null; } byte[] b = createChecksum(filePath); if(null == b){ System.err.println(("Error:create md5 string failure!")); return null; } StringBuilder result = new StringBuilder(); for (int i = 0; i < b.length; i++) { result.append(Integer.toString((b[i] & 0xff) + 0x100, 16) .substring(1)); } return result.toString(); } /** * 根据文件,在同一文件夹下生成相应的MD5文件,文件名相同,仅后缀名不同 * 比如文件为helloworld.txt,生成MD5文件:helloworld.md5 * @param filePath 文件绝对路径 */ public static void generateMD5File(String filePath) throws IOException { //获得该文件实例 File file = new File(filePath); //获得该文件的MD5码 String md5code = generateMD5(filePath); //获得该文件的文件夹路径 String directoryPath = file.getParentFile().getAbsolutePath(); //生成该文件对应的MD5文件的文件名 String md5FileName = file.getName().substring(0, file.getName().lastIndexOf(".")) + ".md5"; //获得该文件对应的MD5文件的绝对路径 String md5FilePath = directoryPath + File.separator + md5FileName; //生成MD5文件 File md5File = new File(md5FilePath); if(!md5File.exists()){ md5File.createNewFile(); } //文件写入MD5码的FileWriter类 FileWriter fileWriter = new FileWriter(md5File); //将MD5码写入到MD5文件中 fileWriter.write(md5code); //刷新流 fileWriter.flush(); //关流 fileWriter.close(); //打印提示信息 System.out.println("创建MD5文件成功:" + md5FilePath); } /** * 输入文件夹名称,将该文件夹下所有的文件都生成同名的MD5文件 * @param directoryPath */ public static void generateMD5Files(String directoryPath) throws IOException { //创建文件夹实例 File directory = new File(directoryPath); //文件数组 File[] files = null; if(directory.isDirectory()){ //获得所有文件 files = directory.listFiles(); //分别为每一个文件创建MD5文件 for(int i=0; i<files.length; i++){ generateMD5File(files[i].getAbsolutePath()); } }else{ System.err.println("不是文件夹,请检查路径!"); return; } } /** * 测试类 * @param args * @throws IOException */ public static void main(String[] args) throws IOException { //输入文件的绝对路径,生成该文件同一文件夹下的相同文件名,后缀名为.md5的文件 generateMD5File("C:\\Users\\李小白\\Desktop\\MD5\\helloworld.txt"); //输入文件夹的绝对路径,生成该文件夹下所有文件的MD5文件,该文件夹的文件数多一倍 generateMD5Files("C:\\Users\\李小白\\Desktop\\MD5"); } }
-
Java生成MD5的两种方式
2021-04-08 15:32:561 原生的 ...* MD5加密工具类 * @author pibigstar * */ public class MyMD5Util { //盐,用于混交md5 private static final String slat = "&%5123***&&%%$$#@"; public static...1 原生的
package com.pibigstar.common.utils; import java.security.MessageDigest; /** * MD5加密工具类 * @author pibigstar * */ public class MyMD5Util { //盐,用于混交md5 private static final String slat = "&%5123***&&%%$$#@"; public static String encrypt(String dataStr) { try { dataStr = dataStr + slat; MessageDigest m = MessageDigest.getInstance("MD5"); m.update(dataStr.getBytes("UTF8")); byte s[] = m.digest(); String result = ""; for (int i = 0; i < s.length; i++) { result += Integer.toHexString((0x000000FF & s[i]) | 0xFFFFFF00).substring(6); } return result; } catch (Exception e) { e.printStackTrace(); } return ""; } }
2 使用Spring中的工具类package com.pibigstar.common.utils; import org.springframework.util.DigestUtils; import com.pibigstar.common.Constant; /** * MD5工具类 * @author pibigstar * */ public class MD5Util { //盐,用于混交md5 private static final String slat = "&%5123***&&%%$$#@"; /** * 生成md5 * @param seckillId * @return */ public static String getMD5(String str) { String base = str +"/"+slat; String md5 = DigestUtils.md5DigestAsHex(base.getBytes()); return md5; } }
-
java实现的MD5摘要算法完整实例
2020-08-31 18:33:39主要介绍了java实现的MD5摘要算法,结合完整实例形式分析了java实现md5单项加密的具体步骤与相关操作技巧,需要的朋友可以参考下 -
JAVA生成MD5的方法
2019-05-22 14:14:09public class MD5 { public static void main(String[] args) { String md5 = getMD5("210534"); System.out.println(md5); System.out.println(md5.length()); String encry... -
java实现对文件的各种操作的工具类.md
2021-04-02 08:50:42# java实现对文件的各种操作的工具类 ## 可以实现的操作有: 1. 删除单个文件 2. 删除文件夹及文件夹下的文件 3. 使用文件流对单个文件进行复制 4. 复制整个文件夹内容(包含子文件夹中的所有内容) 5. ... -
Java 获取文件md5值校验文件
2021-09-30 09:54:57加入我们想校验两个文件网络传输中是否改变了,或者校验两个文件是否一致可以使用md5校验。 代码: import java.io.FileInputStream; import java.io.InputStream; import java.math.BigInteger; import java.... -
java生成MD5校验码(文件/字符串)
2017-04-22 00:01:36转自:http://blog.csdn.net/achang21/article/details/33741477 需要commons-codec包 文件 DigestUtils.md5Hex(new FileInputStream(new File("C:/1.txt"))) 字符串 DigestUtils.md5Hex("111") -
Java 获取 文件md5校验码
2021-02-12 16:26:13讯雷下载的核心思想是校验文件的md5值,两个文件若md5相同则为同一文件。当得到用户下载某个文件的请求后它...查了下资料,java也可以实现文件md5校验码获取,代码如下:import java.io.File;import java.io.FileInp... -
生成文件的Hash码MD5
2014-11-04 18:42:05Java程序。可以生成文件的MD5哈希值。生成的Hash值可保存到txt文件中。程序完全可运行。 -
Java生成MD5算法
2021-02-26 11:32:14MD5即Message-Digest Algorithm 5(信息-摘要算法5),是一种用于产生数字签名的单项散列算法。MD5算法的作用是让大容量信息在用数字签名软件签私人密匙前被”压缩”成一种保密的格式,将一个任意长度的“字节串”通过... -
Java/Go 快速生成文件的 MD5 并判断文件是否相等
2022-03-23 17:10:59工作中遇到一个需要比较两个文件是否一致的问题,第一反应就是通过 MD5 比较,所以直接干代码。 为什么会写 Go 呢,纯属是最近在使用 Go 语言,然后顺便也整理一下。(就是为了让文章字数显得多 ) Java 实现 新建一... -
使用Java为大文件生成MD5非常慢
2021-02-28 14:07:30我用nio重写你的代码,代码有点像下面:private static String generateMD5(FileInputStream inputStream){if(inputStream==null){return ...try {md = MessageDigest.getInstance("MD5");FileChannel channel = ... -
Java 生成文件MD5算法
2015-02-04 17:15:43代码: import java.security.MessageDigest; import java.security.NoSuchAlgorithmException...public class MD5Util { private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5", "6", "7", -
java快速生成大文件的MD5算法 MD5Util java
2018-11-16 17:44:40java快速生成大文件的MD5算法 MD5Util java -
生成文件的MD5值或者CRC校验值
2018-11-23 11:14:29能在windows下运行的exe文件,电脑必须装java环境,没有的话自行百度,用java语言开发的,要源码留下邮箱 -
Java如何将一个文件转化成MD5
2021-03-27 12:04:15文章目录1、将文件转化为MD5之前首先要明白字符串转MD5是什么原理2、文件MD5加密也是先转换类型再通过工具加密 1、将文件转化为MD5之前首先要明白字符串转MD5是什么原理 字符串转MD5是通过先将字符串转化为byte[]... -
java实现MD5加密.pdf
2018-09-26 11:14:26MD5加密代码解析,加密技术详细剖析。 -
Java生成MD5签名的方法
2018-01-13 17:32:24public static String md5(String content) { if (StringUtils.isBlank(content)) { return null; } try { byte[] b = content.getBytes("UTF-8"); MessageDigest md = Message -
Java修改文件MD5值-yellowcong
2017-07-15 16:17:10MD5是加密算法的一种,MD5对于每一个文件来说都是唯一的,在百度网盘、QQ的文件快传中,都是算文件的MD5在本地的服务器上有没有,如果有直接就可以上传。但是有一个场景,就是我的文件在百度上是 违规的,我可以通过... -
Gradle生成md5代码
2015-12-03 09:45:09用Gradle生成md5代码,直接复制到build.gradle中然后调用这个方法即可 -
Java生成MD5的方法
2019-05-22 14:16:38一、代码 public class MD5 { public static void main(String[] args) { String md5 = getMD5("210534"); System.out.println(md5); System.out.println(md5.length()); String... -
js java script MD5码的生成
2021-11-12 10:20:10导致类似 js和java前后端加密不一致的情况,一定要前后端对接下MD5码的编码格式 我是看微信环境编码格式不对,暴力注销了其他编码方式,也能解决问题,一般不提倡,自己根据给到的demo来进行调用 ... -
SHA1或MD5算法获取文件摘要值(JAVA)
2013-07-31 15:49:05SHA1或MD5算法获取文件摘要值(JAVA) -
MD5文件流直接生成
2021-04-02 16:33:20确实很爽,后台接收到文件的时候直接调用方法生成MD5 //调用 MD5Util.getFileMD5String(tempFile); package com.jeecms.common.util; import java.io.File; import java.io.FileInputStream; import java.io... -
JAVA获取文件的MD5值
2017-07-24 20:20:561.推荐如下方法: ... * 推荐此方法获取文件MD5 * @param path 文件路径 * @return */ public static String getMd5File(String path){ String md5 = null; try { FileInputStream fis= new FileI