下面的代码是自己写的:
/** * Copyright 2012 * * All right reserved * * Created on 2012-8-31下午5:43:58 */ package com.test.md5; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import org.apache.log4j.Logger; /** * * @author xuepeng * */ public class MD5Checksum { private static Logger LOGGER = Logger.getLogger(MD5Checksum.class); 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) { LOGGER.error(e.getMessage(), e); } catch (NoSuchAlgorithmException e) { LOGGER.error(e.getMessage(), e); } catch (IOException e) { LOGGER.error(e.getMessage(), e); } finally { try { if (null != fis) { fis.close(); } } catch (IOException e) { LOGGER.error(e.getMessage(), e); } } return null; } // see this How-to for a faster way to convert // a byte array to a HEX string public static String getMD5Checksum(String filename) { if (!new File(filename).isFile()) { LOGGER.error("Error: " + filename + " is not a valid file."); return null; } byte[] b = createChecksum(filename); if(null == b){ LOGGER.error("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(); } public static void main(String args[]) { try { long beforeTime = System.currentTimeMillis(); String path = "C:\\Users\\user\\Desktop\\work_shedule.txt"; String before = "999E42920C54CF7D66190731CD54F0E6".toLowerCase(); String md5 = getMD5Checksum(path); System.out.println(md5); System.out.println(md5.equals(before)); File file = new File(path); System.out.println(path+ "'s size is : " +file.length()+" bytes, it consumes " + (System.currentTimeMillis() - beforeTime) + " ms."); } catch (Exception e) { LOGGER.error(e.getMessage(), e); } } }
其实还有方便的MD5生成方法,就是采用apache提供的开源项目 commons-codec.jar 自带的MD5生成。
如:
File file = new File(fileName); String md5 = DigestUtils.md5Hex(new FileInputStream(file));
附件中,我附带了一个方便日常生成MD5的jar,用来进行MD5的生成。
=========================== Google Guava ===============
import com.google.common.hash.HashCode; import com.google.common.hash.Hashing; import com.google.common.io.Files; import java.io.File; public class HashingExample { public static void main(String[] args) throws Exception { print(); File file = new File( "D:/test/FileCopy.java"); HashCode hashCode = Files.hash(file, Hashing.md5()); System.out.println(hashCode.toString()); } }
import com.google.common.hash.HashCode; import com.google.common.hash.Hashing; import com.google.common.io.Files; /** * <pre> * 得到指定文件的MD5 * @param file 文件 * @param upper 是否大写 * @return file文件的MD5 * @throws IOException * </pre> */ public static String createMd5(File file, boolean upper) throws IOException { HashCode hashCode = Files.hash(file, Hashing.md5()); return upper ? hashCode.toString().toUpperCase() : hashCode.toString(); }
有的时候我们不仅仅要对文件做MD5,也需要对字符串String进行MD5操作。下面的方法使用Guava写了一个生成字符串MD5的方法。
/** * <pre> * @param charSequence * @param charset * @param upper * @return 生成的MD5 * </pre> */ public static String createMD5(CharSequence charSequence, Charset charset, boolean upper) { Preconditions.checkNotNull(charSequence, "charSequence is null"); Preconditions.checkNotNull(charset, "charset is null"); String md5 = Hashing.md5().newHasher().putString(charSequence, charset) .hash().toString(); return upper ? md5.toUpperCase() : md5; }
示例:
String md5 = createMD5("hello", Charsets.UTF_8, true); System.out.println(md5);//5D41402ABC4B2A76B9719D911017C592
相关推荐
Java实现MD5大文件校验码详细解析: 包括具体方法解释、注释 通俗易懂、易于理解
Java程序。可以生成文件的MD5哈希值。生成的Hash值可保存到txt文件中。程序完全可运行。
# java实现对文件的各种操作的工具类 ## 可以实现的操作有: 1. 删除单个文件 2. 删除文件夹及文件夹下的文件 3. 使用文件流对单个文件进行复制 4. 复制整个文件夹内容(包含子文件夹中的所有内容) 5. ...
解决js和Java生成MD5值不一致问题,亲自测试过,可以直接使用
用Gradle生成md5代码,直接复制到build.gradle中然后调用这个方法即可
一个生成md5码的工具,超级好用,这个是我平时用来生成文件的md5的工具,实在是缺分才贡献出来的,给个好评吧
对于文本文件(.txt,.java,.c,.cpp),使用字符流处理 对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt,...),使用字节流处理 2.数据的流向:输入流、输出流 3.流的角色:节点流、处理流 节点流:直接从数据...
SHA1或MD5算法获取文件摘要值(JAVA)
使用RSA、MD5对参数生成签名及接收方验签
MD5 是message-digest algorithm 5...MD5是用于对信息生成信息摘要(即散列码)的算法之一。不管文件多大,经过MD5后都能生成唯一的MD5值。好比现在的ISO校验,都是MD5校验。怎么用?当然是把ISO经过MD5后产生MD5的值。
适合人群 1、具备一定Java编程基础。 2、对springboot,spring,mybatis,mybatis plus,mysql,freemarker等java技术有基本应用。 3、可大大提高开发效率,数据表创建完以后,...5、操作手册参见项目中的README.md文件
CDN静态文件访问 分布式存储 分布式搜索引擎 应用发布与监控 应用容灾及机房规划 系统动态扩容 分布式架构策略-分而治之 从简到难,从网络通信探究分布式通信原理 基于消息方式的系统间通信 理解通信协议...
能在windows下运行的exe文件,电脑必须装java环境,没有的话自行百度,用java语言开发的,要源码留下邮箱
代码生成二维码
一、 流的分类 • 按数据流动方向 – 输入流:只能从中读取字节数据,而不能向其写出数据 – 输出流:只能向其写入字节数据,而不能从中读取数据 • 按照流所处理的数据类型 – 字节流:用于处理字节数据。...
Java实现添加水印,文件上传,生成略缩图,文件操作,Md5加密码,时间日期操作等java常用的工具类源码(28个合集),可直接用于你的项目设计中,实战中有些代码直接套用就ok,不用动手了,会写代码的不一定是高手,...
Signature signet = java.security.Signature.getInstance("MD5withRSA"); signet.initSign(prikey); signet.update(plainText.getBytes()); byte[] signed = Base64.encodeToByte(signet.sign()); return ...
任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比...