`
kanpiaoxue
  • 浏览: 1781658 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JAVA 生成文件的MD5码

 
阅读更多

 下面的代码是自己写的:

/**
 * 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校验码是基础的编程技能,尤其在处理文件校验、数据安全等领域。但是需要注意的是,由于MD5的安全性问题(容易出现碰撞),现在更多地使用SHA-256等更安全的散列算法。

    Java实现MD5大文件校验码详解

    Java实现MD5大文件校验码详细解析: 包括具体方法解释、注释 通俗易懂、易于理解

    JAVA_对文件MD5加密

    2. **定义类和方法**:创建`ZgjGetMD5`类,并在其中定义了`getMD5`方法用于生成文件的MD5摘要,以及辅助方法`byteToHexString`用于将字节数组转换为十六进制字符串表示形式。 3. **生成MD5摘要**: - 使用`...

    java源码 java 获取文件md5值(用于检测文件完整性) 2018127

    在Java中,`java.security.MessageDigest` 类用于生成不同类型的哈希值,包括MD5。 以下是一个简单的Java源码示例,展示了如何获取文件的MD5值: ```java import java.io.FileInputStream; import java.io....

    JS 生成MD5值和JAVA生成MD5值,自己测试过很好用

    标题提到的"JS生成MD5值和JAVA生成MD5值",实际上是指在JavaScript和Java这两种不同的编程语言中,如何对同一份数据计算MD5哈希值。由于MD5算法是公开的,理论上在任何支持该算法的编程环境下都应该得到相同的输出。...

    解决java 与C# MD5 不一致问题 代码

    ### 解决Java与C# MD5不一致问题 在软件开发过程中,经常需要对数据进行加密处理以确保数据的安全性和一致性。MD5是一种常用的哈希算法,被广泛应用于各种场景中,如密码加密、文件校验等。但在跨平台或多语言环境...

    JavaSwing文件Md5值计算器

    JavaSwing文件Md5值计算器是一款基于Java Swing开发的实用工具,主要用于计算文件的MD5哈希值。MD5(Message-Digest Algorithm 5)是一种广泛使用的加密散列函数,产生一个128位(16字节)的散列值,通常用32个十六...

    java实现对文件的各种操作的工具类.md

    # java实现对文件的各种操作的工具类 ## 可以实现的操作有: 1. 删除单个文件 2. 删除文件夹及文件夹下的文件 3. 使用文件流对单个文件进行复制 4. 复制整个文件夹内容(包含子文件夹中的所有内容) 5. ...

    Java 生成校验码及校验码判断

    - **下载文件完整性检查**:服务器提供文件时,可以附加文件的MD5或SHA校验码,客户端下载后对比,确认文件是否完整。 - **账号安全**:密码通常会用哈希算法处理并存储,校验码用于验证用户输入的密码是否正确,而...

    使用 Java 生成 MD5 编码

    本篇文章将详细探讨如何在 Java 中生成 MD5 编码,以及其相关知识点。 MD5 是一种广泛使用的哈希函数,它能够将任意长度的输入(也叫做预映射或消息)转化为固定长度的输出,通常是一个 128 位的二进制数,通常用 ...

    md5码 java 程序

    下面我们将深入探讨MD5码的原理、用途以及如何在Java程序中实现MD5码的生成。 MD5算法的原理: MD5是由Ronald Rivest在1991年设计的,它是一个单向函数,即给定任意长度的信息,通过MD5计算出固定长度的摘要信息,...

    生成md5码的工具

    标题中的“生成md5码的工具”是指一种软件或应用程序,能够帮助用户快速计算出文件的MD5值。这种工具通常具有用户友好的界面,只需选择要检测的文件,它就能自动计算并显示该文件的MD5摘要。描述中的“超级好用”...

    MD5码生成工具

    总的来说,MD5码生成工具是IT领域中一个实用的辅助工具,Java程序员可以借助如`MD5Gene.java`这样的代码来便捷地实现MD5码的计算。然而,需要注意的是,由于MD5的安全性问题(容易出现碰撞),在密码学等领域,MD5...

    Gradle生成md5代码

    标题“Gradle生成md5代码”指的是利用Gradle脚本来计算文件或字符串的MD5值。在Android开发或者Java项目中,我们可能需要在构建过程中对资源文件进行哈希处理,比如验证资源文件的完整性或生成唯一的标识。以下是一...

    生成文件的Hash码MD5

    在Java中,生成文件的MD5 Hash码是一个常见的需求,主要用于数据完整性校验、文件比对或者密码存储等方面。 首先,我们要理解哈希函数的基本概念。哈希函数是一种单向函数,它将输入(也称为预映射或消息)转换为...

    md5java代码+md5工具

    在Java编程中,MD5常被用来生成一个固定长度(32位)的十六进制数字摘要,这个摘要能唯一地代表原始数据。这种特性使得MD5在存储密码、验证文件完整性和防止数据篡改等方面有着重要的应用。 首先,让我们来看看`...

Global site tag (gtag.js) - Google Analytics