java 文件md5+字符串md5 实现

Advertisement
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.log4j.Logger;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * md5算法工具
 */
public class MD5BigFileUtil {
    private final static Logger logger = Logger.getLogger(MD5BigFileUtil.class);
    static MessageDigest md = null;

    static {
        try {
            md = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException ne) {
            logger.error("NoSuchAlgorithmException: md5", ne);
        }
    }

    /**
     * 对一个文件求他的md5值
     * @param f 要求md5值的文件
     * @return md5串
     */
    public static String md5(File f) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(f);
            //100KB each time
            byte[] buffer = new byte[102400];
            int length;
            long loopCount = 0;
            while ((length = fis.read(buffer)) != -1) {
                md.update(buffer, 0, length);
                loopCount++;
            }

            logger.debug("read file to buffer loopCount:"+loopCount);

            return new String(Hex.encodeHex(md.digest()));
        } catch (FileNotFoundException e) {
            logger.error("md5 file " + f.getAbsolutePath() + " failed:" + e.getMessage());
            return null;
        } catch (IOException e) {
            logger.error("md5 file " + f.getAbsolutePath() + " failed:" + e.getMessage());
            return null;
        } finally {
            try {
                if (fis != null) fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 求一个字符串的md5值
     * @param target 字符串
     * @return md5 value
     */
    public static String md5(String target) {
        return DigestUtils.md5Hex(target);
    }

    public static void main(String[] args) {
        long begin =System.currentTimeMillis();
        System.out.println(md5(new File("G:/BT/PremierePro_6_LS7.7z")));
        long end =System.currentTimeMillis();
        System.out.println("time:"+((end-begin)/1000)+"s");

        System.out.println(md5("hello world"));
    }

}

Similar Posts:

  • Java(Android)对文件全文生成MD5摘要

    程序出处:http://liuxiang8484.blog.163.com/blog/static/734790972011101093250899/ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.security.MessageDigest; public class MyMD5 { /** * 对文件全文生成MD5摘要 *@param file要加密的文

  • Android初级教程:对文件和字符串进行MD5加密工具类

    转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/52200008   点击打开链接 之前写过一篇博文,是针对字符串进行md5加密的.今天对其进行改进,加入针对某个文件,进行md5加密,并获取加密后的值.并把两个功能封装成了工具类,如果有需要这个算法的,可直接使用. 直接上算法封装的工具类代码: package com.itydl.utils; import java.io.File; import java.io.FileInpu

  • 【转】Java生成对应字符串的MD5密码模块

    原文网址:http://www.cnblogs.com/xudong-bupt/archive/2013/05/10/3070899.html (1)一般使用的数据库中都会保存用户名和密码,其中密码不使用明码保存. 有时候用MD5密码,很多语言都提供了将字符串生成为MD5密码的方法或函数.MD5的加密算法是公开的. 有时候也可以用自己的字符串加密算法,这种加密算法是只有自己知道的. (2)破解MD5的过程就是先算好大量或者所有可能的字符串的MD5数值,之后进行查询就可以破解.虽然有些网站规定了密

  • MD5算法【计算文件和字符串的MD5值】

    1. MD5算法是一种散列(hash)算法(摘要算法,指纹算法),不是一种加密算法(易错).任何长度的任意内容都可以用MD5计算出散列值.MD5的前身:MD2.MD3.MD4.介绍工具:CalcMD5.zip.主要作用就是[验明"真身"],字符串文件均可(确保信息传输过程中的完整性.一致性). 2. MD5算法的特点: 1. 长度固定 2. 单向性 ---- 可以通过MD5计算器来计算文件或者字符串的MD5值,但是不可以通过给出的MD5值来推算出文件或者字符串. 3. 抗冲突性(不重复

  • 有没有可能出现一个不同的字符串MD5出来相同的md5值呢?

    想很多认证,支付宝接口,网银接口等,都是使用MD5计算密匙 sign来进行身份权限认证的,那有没有可能不同的字符串MD5出来的值相同呢? 换句话说,对于同一字符串,MD5是不是唯一的? --cut-- 启程在1970-01-01 20:28:00回答到: 特意看了下百科: MD5算法具有以下特点: 1.压缩性:任意长度的数据,算出的MD5值长度都是固定的. 2.容易计算:从原数据计算出MD5值很容易. 3.抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别. 4.强

  • 获取Java的32位MD5实现

    获取Java的32位MD5实现 public static String md5(String s) { char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; try { byte[] btInput = s.getBytes(); // 获得MD5摘要算法的 MessageDigest 对象 MessageDigest mdInst = MessageDigest.getIns

  • 使用Java自带API MD5算法

    public class EncryptionByMD5 { public static String getMD5(byte[] source) { String s = null; char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };// 用来将字节转换成16进制表示的字符 try { java.security.MessageDigest

  • java文件的编译及其字符串编码

    组织下,目前习得的: 对于java编译器.编译文件时,它需要得到文件的编码,如果未指定,则使用系统默认编码(对于linux就是locale所对应的).Java编译的时候会转换成统一的unicode编码处理(字符串在java内存中总是按unicode编码存储的),最后保存的时候再转换为utf编码--以"中文"两个字为例,其Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e69687".(该段中的句子是引自网上的一篇博文.)

  • java中简单实现MD5加密

    程序加密的需要,自己找了点java加密的资料,做了简单的例子去学习了一下.由于刚刚学习,很多地方还没有深入理解,只是先用着...,有什么地方不对,请大家指出来,小弟我表示谢谢啦....(使用到的jar包可以到这里下载) import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import org.apache.commons.codec.digest.DigestUtils;//开发的j

  • 文件校验(MD5值验证法)

    文件校验(MD5值验证法) 每个文件都可以用 MD5 验证程序算出一个固定的 MD5 码来.软件作者往往会事先计算出他的程序的 MD5 码并帖在网上.因此,在网上看到某个程序下载旁注明了 MD5 码时,可以把它记下来,下载了这个程序后用 MD5 验证程序计算你所下载的文件的 MD5 码,和你之前记下 MD5 码比较,就知道你下的是不是原版了,如果两者相同,那么你所下载的是原版.如果计算出来的和网上注明的不匹配,那么你下载的这个文件不完整,或是被别人动过手脚. 处在"百盘争鸣"的时代,大

Tags: