下面的代码是自己写的:
/** * 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校验码是基础的编程技能,尤其在处理文件校验、数据安全等领域。但是需要注意的是,由于MD5的安全性问题(容易出现碰撞),现在更多地使用SHA-256等更安全的散列算法。
Java实现MD5大文件校验码详细解析: 包括具体方法解释、注释 通俗易懂、易于理解
2. **定义类和方法**:创建`ZgjGetMD5`类,并在其中定义了`getMD5`方法用于生成文件的MD5摘要,以及辅助方法`byteToHexString`用于将字节数组转换为十六进制字符串表示形式。 3. **生成MD5摘要**: - 使用`...
在Java中,`java.security.MessageDigest` 类用于生成不同类型的哈希值,包括MD5。 以下是一个简单的Java源码示例,展示了如何获取文件的MD5值: ```java import java.io.FileInputStream; import java.io....
标题提到的"JS生成MD5值和JAVA生成MD5值",实际上是指在JavaScript和Java这两种不同的编程语言中,如何对同一份数据计算MD5哈希值。由于MD5算法是公开的,理论上在任何支持该算法的编程环境下都应该得到相同的输出。...
### 解决Java与C# MD5不一致问题 在软件开发过程中,经常需要对数据进行加密处理以确保数据的安全性和一致性。MD5是一种常用的哈希算法,被广泛应用于各种场景中,如密码加密、文件校验等。但在跨平台或多语言环境...
JavaSwing文件Md5值计算器是一款基于Java Swing开发的实用工具,主要用于计算文件的MD5哈希值。MD5(Message-Digest Algorithm 5)是一种广泛使用的加密散列函数,产生一个128位(16字节)的散列值,通常用32个十六...
# java实现对文件的各种操作的工具类 ## 可以实现的操作有: 1. 删除单个文件 2. 删除文件夹及文件夹下的文件 3. 使用文件流对单个文件进行复制 4. 复制整个文件夹内容(包含子文件夹中的所有内容) 5. ...
- **下载文件完整性检查**:服务器提供文件时,可以附加文件的MD5或SHA校验码,客户端下载后对比,确认文件是否完整。 - **账号安全**:密码通常会用哈希算法处理并存储,校验码用于验证用户输入的密码是否正确,而...
本篇文章将详细探讨如何在 Java 中生成 MD5 编码,以及其相关知识点。 MD5 是一种广泛使用的哈希函数,它能够将任意长度的输入(也叫做预映射或消息)转化为固定长度的输出,通常是一个 128 位的二进制数,通常用 ...
下面我们将深入探讨MD5码的原理、用途以及如何在Java程序中实现MD5码的生成。 MD5算法的原理: MD5是由Ronald Rivest在1991年设计的,它是一个单向函数,即给定任意长度的信息,通过MD5计算出固定长度的摘要信息,...
标题中的“生成md5码的工具”是指一种软件或应用程序,能够帮助用户快速计算出文件的MD5值。这种工具通常具有用户友好的界面,只需选择要检测的文件,它就能自动计算并显示该文件的MD5摘要。描述中的“超级好用”...
总的来说,MD5码生成工具是IT领域中一个实用的辅助工具,Java程序员可以借助如`MD5Gene.java`这样的代码来便捷地实现MD5码的计算。然而,需要注意的是,由于MD5的安全性问题(容易出现碰撞),在密码学等领域,MD5...
标题“Gradle生成md5代码”指的是利用Gradle脚本来计算文件或字符串的MD5值。在Android开发或者Java项目中,我们可能需要在构建过程中对资源文件进行哈希处理,比如验证资源文件的完整性或生成唯一的标识。以下是一...
在Java中,生成文件的MD5 Hash码是一个常见的需求,主要用于数据完整性校验、文件比对或者密码存储等方面。 首先,我们要理解哈希函数的基本概念。哈希函数是一种单向函数,它将输入(也称为预映射或消息)转换为...
在Java编程中,MD5常被用来生成一个固定长度(32位)的十六进制数字摘要,这个摘要能唯一地代表原始数据。这种特性使得MD5在存储密码、验证文件完整性和防止数据篡改等方面有着重要的应用。 首先,让我们来看看`...