`
kanpiaoxue
  • 浏览: 1742979 次
  • 性别: 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大文件校验码详细解析: 包括具体方法解释、注释 通俗易懂、易于理解

    生成文件的Hash码MD5

    Java程序。可以生成文件的MD5哈希值。生成的Hash值可保存到txt文件中。程序完全可运行。

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

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

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

    解决js和Java生成MD5值不一致问题,亲自测试过,可以直接使用

    Gradle生成md5代码

    用Gradle生成md5代码,直接复制到build.gradle中然后调用这个方法即可

    生成md5码的工具

    一个生成md5码的工具,超级好用,这个是我平时用来生成文件的md5的工具,实在是缺分才贡献出来的,给个好评吧

    java IO流总结.md

    对于文本文件(.txt,.java,.c,.cpp),使用字符流处理 对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt,...),使用字节流处理 2.数据的流向:输入流、输出流 3.流的角色:节点流、处理流 节点流:直接从数据...

    SHA1或MD5算法获取文件摘要值(JAVA)

    SHA1或MD5算法获取文件摘要值(JAVA)

    使用RSA、MD5对参数生成签名及接收方验签

    使用RSA、MD5对参数生成签名及接收方验签

    MD5Utils.java

    MD5 是message-digest algorithm 5...MD5是用于对信息生成信息摘要(即散列码)的算法之一。不管文件多大,经过MD5后都能生成唯一的MD5值。好比现在的ISO校验,都是MD5校验。怎么用?当然是把ISO经过MD5后产生MD5的值。

    Java一键生成代码到controller层【源码】

    适合人群 1、具备一定Java编程基础。 2、对springboot,spring,mybatis,mybatis plus,mysql,freemarker等java技术有基本应用。 3、可大大提高开发效率,数据表创建完以后,...5、操作手册参见项目中的README.md文件

    Java思维导图xmind文件+导出图片

    CDN静态文件访问 分布式存储 分布式搜索引擎 应用发布与监控 应用容灾及机房规划 系统动态扩容 分布式架构策略-分而治之 从简到难,从网络通信探究分布式通信原理 基于消息方式的系统间通信 理解通信协议...

    生成文件的MD5值或者CRC校验值

    能在windows下运行的exe文件,电脑必须装java环境,没有的话自行百度,用java语言开发的,要源码留下邮箱

    生成二维码--.md

    代码生成二维码

    Java流(文件读写操作)

    一、 流的分类 • 按数据流动方向 – 输入流:只能从中读取字节数据,而不能向其写出数据 – 输出流:只能向其写入字节数据,而不能从中读取数据 • 按照流所处理的数据类型 – 字节流:用于处理字节数据。...

    Java实现添加水印,文件上传,生成略缩图,文件操作,Md5加密码,时间日期操作等java常用的工具类源码(28个合集).zip

    Java实现添加水印,文件上传,生成略缩图,文件操作,Md5加密码,时间日期操作等java常用的工具类源码(28个合集),可直接用于你的项目设计中,实战中有些代码直接套用就ok,不用动手了,会写代码的不一定是高手,...

    java licence生成例子

    Signature signet = java.security.Signature.getInstance("MD5withRSA"); signet.initSign(prikey); signet.update(plainText.getBytes()); byte[] signed = Base64.encodeToByte(signet.sign()); return ...

    数字签名验证(MD5工具)

    任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比...

Global site tag (gtag.js) - Google Analytics