`

java计算过G文件md5 值计算

阅读更多

原文链接:http://www.cnblogs.com/yaowukonga/p/3523668.html

 

package io.bigdata;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.security.Provider;

import java.security.Security;

import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;

 

import org.apache.commons.codec.digest.DigestUtils;

 

public class Md5CaculateUtil {

 

    private Md5CaculateUtil(){

        

    }

    

    private static char[] hexChar = {

        '0','1','2','3','4','5','6','7','8','9',

        'a','b','c','d','e','f'

    };

    

    public static String getHash(String fileName,String hashType) throws IOException, NoSuchAlgorithmException{

        

        File f = new File(fileName);

        System.out.println(" -------------------------------------------------------------------------------");

        System.out.println("|当前文件名称:"+f.getName());

        System.out.println("|当前文件大小:"+(f.length()/1024/1024)+"MB");

        System.out.println("|当前文件路径[绝对]:"+f.getAbsolutePath());

        System.out.println("|当前文件路径[---]:"+f.getCanonicalPath());

        System.out.println(" -------------------------------------------------------------------------------");

        

        InputStream ins = new FileInputStream(f);

        

        byte[] buffer = new byte[8192];

        MessageDigest md5 = MessageDigest.getInstance(hashType);

        

        int len;

        while((len = ins.read(buffer)) != -1){

            md5.update(buffer, 0, len);

        }

 

        ins.close();

//        也可以用apache自带的计算MD5方法

        return DigestUtils.md5Hex(md5.digest());

//        自己写的转计算MD5方法

//        return toHexString(md5.digest());

    }

    

    public static String getHash2(String fileName){

        File f = new File(fileName);

        return String.valueOf(f.lastModified());

    }

    

    

    protected static String toHexString(byte[] b){

        StringBuilder sb = new StringBuilder(b.length*2);

        for(int i=0;i<b.length;i++){

            sb.append(hexChar[(b[i] & 0xf0) >>> 4]);

            sb.append(hexChar[b[i] & 0x0f]);

        }

        return sb.toString();

    }

    

    /*

     * 获取MessageDigest支持几种加密算法

     */

    @SuppressWarnings({ "rawtypes", "unchecked" })

    private static String[] getCryptolmpls(String serviceType){

        

        Set result = new HashSet();

//        all providers

        Provider[] providers = Security.getProviders();

        for(int i=0;i<providers.length;i++){

//            get services provided by each provider

            Set keys = providers[i].keySet();

            for(Iterator it = keys.iterator();it.hasNext();){

                String key = it.next().toString();

                key = key.split(" ")[0];

                

                if(key.startsWith(serviceType+".")){

                    result.add(key.substring(serviceType.length()+1));

                }else if(key.startsWith("Alg.Alias."+serviceType+".")){

                    result.add(key.substring(serviceType.length()+11));

                }

            }

        }

        return (String[]) result.toArray(new String[result.size()]);

    }

    

    

    public static void main(String[] args) throws Exception, Exception {

//        调用方法

//        String[] names = getCryptolmpls("MessageDigest");

//        for(String name:names){

//            System.out.println(name);

//        }

        long start = System.currentTimeMillis();

        System.out.println("开始计算文件MD5值,请稍后...");

        String fileName = "E:\\Office_2010_Toolkit_2.2.3_XiaZaiBa.zip";

////        String fileName = "E:\\SoTowerStudio-3.1.0.exe";

        String hashType = "MD5";

        String hash = getHash(fileName,hashType);

        System.out.println("MD5:"+hash);

        long end = System.currentTimeMillis();

        System.out.println("一共耗时:"+(end-start)+"毫秒");

    }

}

分享到:
评论

相关推荐

    JAVA代码实现MD5编码

    在JAVA中实现MD5编码通常是为了数据校验、密码存储等目的,因为MD5能将数据转化为不可逆的128位(16字节)散列值,通常以32位的十六进制字符串表示。在此,我们将深入探讨如何在Java中不依赖任何第三方API来实现MD5...

    JAVA实现MD5算法.rar

    在实际应用中,MD5经常用于验证文件的完整性,比如下载文件后,通过比较本地文件的MD5值与服务器上的MD5值,确认文件是否完整无误。 需要注意的是,虽然MD5算法在加密强度上已经不再安全,因为它容易受到碰撞攻击,...

    MD5加密 java源文件

    根据提供的部分Java代码片段,我们可以看出这是一个简单的MD5算法实现类`MD5`,其主要功能包括初始化MD5上下文、更新散列值、计算最终的MD5值并将其转换为十六进制字符串表示形式。 1. **初始化MD5上下文 (`md5Init...

    JAVA加密MD5源代码

    根据提供的文件信息,我们可以提取并总结出关于“JAVA加密MD5源代码”的一系列知识点: ### MD5算法简介 MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,能够将任意长度的消息压缩为一个固定...

    MD5摘要算法源码(java版)

    ### MD5摘要算法详解:Java实现 #### 一、引言 MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,能够将任意长度的信息转化为一个固定长度(通常为128位)的散列值或摘要。这个摘要通常被用来验证...

    MD5 加密源代码-java

    自2004年以来,研究人员已经能够找到具有相同MD5散列值的不同输入(即碰撞),这使得MD5不再适合用于需要高度安全性的场景,比如密码哈希和数字签名等。 ### 5. MD5在现代的应用 尽管存在安全问题,MD5仍然在某些...

    MD5 加密算法源码(支持多线程)

    总的来说,这个压缩包提供了一个支持多线程的MD5加密算法源代码实现,这对于处理大量数据的系统或者需要高效计算MD5值的场景非常有用。然而,需要注意的是,由于MD5的安全性问题,不推荐用于密码存储等需要高度安全...

    JAVA高手MD5加密算法底层源码完美实现

    4. **MD5循环:** 每个块都会经过四个不同的处理阶段,每个阶段包含若干轮运算,每轮运算包括四个不同的函数F、G、H和I,以及16个32位的W值,这些W值是根据当前块中的32位字计算得出的。 5. **更新中间变量:** 在...

    md5加密实现代码.zip

    - **数据完整性检查**:MD5常用于验证文件或数据的完整性,比如下载文件后通过比较本地文件的MD5值和服务器提供的MD5值,判断文件是否完整无误。 - **密码存储**:虽然MD5的碰撞攻击问题(即不同输入产生相同哈希...

    MD5算法(java)

    在实际应用中,如果你发现有一个名为"MD5"的压缩包文件,这可能包含了一个Java程序,该程序实现了MD5算法,可能包括了MD5加密的完整流程,如上述代码所示。你可以解压文件并运行其中的Java程序,以验证或自定义MD5...

    MD5摘要加密

    1. **文件校验**:MD5常用于验证文件的完整性和未被篡改,例如在下载文件后,可以通过计算本地文件的MD5值并与服务器提供的MD5值比较来确认文件是否正确传输。 2. **密码存储**:虽然现在MD5不再被认为足够安全,但...

    Md5加密jar包(内含使用说明)

    4. **MD5计算**:对每个块执行四个独立的循环操作,每个循环包含16次迭代,每次迭代都使用四个不同的基本变换函数(F, G, H, I)。这四个函数与当前块中的16个32位字以及四个32位变量A, B, C, D相互作用,更新这些...

    MD5加密类

    在这个`TestMd5.java`文件中,我们首先创建了一个`MessageDigest`对象,并指定算法为"MD5"。然后,我们将待加密的字符串转换为字节数组,通过`digest()`方法计算MD5摘要。最后,我们将得到的16字节的二进制数据转换...

    MD5 编码算法

    在实际应用中,我们可以通过各种编程语言的库或工具来计算MD5值,例如Python的`hashlib`模块,Java的`java.security.MessageDigest`类,或者命令行工具如`md5sum`。理解MD5的工作原理并合理使用,可以帮助我们更好地...

    MD5Generator_MD5Generator_Who_源码.rar

    例如,当你下载一个大文件时,服务器可能会提供该文件的MD5校验和,你可以使用MD5Generator计算本地文件的MD5值并与之比较,以确认文件在传输过程中没有被篡改。 MD5也常用于密码存储,尽管现在已经被认为不够安全...

    MD5源代码,可以直接使用,亲测

    源码是实现特定功能的编程代码,对于MD5源码而言,它包含了计算MD5哈希值的算法流程。这段代码通常包括以下几个关键步骤: 1. **初始化**: 开始计算前,对四个32位的中间变量A、B、C和D进行初始化,设置为特定的...

    md5加密算法的两种方法

    3. **MD5计算**:通过四个不同的函数(F, G, H, I)和四个32位的变量A, B, C, D,对每个消息块进行迭代运算,这些变量在每次迭代后都会更新。 4. **结果组合**:经过多次迭代后,四个变量A, B, C, D的值就是最终的MD...

    MD5加密文件

    根据给定文件的信息,本文将深入探讨MD5加密的基本原理及其在Java中的实现方式,并从中提炼出相关的IT知识点。 ### MD5加密概述 MD5(Message-Digest Algorithm 5)是一种广泛使用的散列函数,可以将任意长度的...

    RFC1321 md5 中英文+实例

    如果两个文件的MD5值相同,我们可以说它们的内容是完全一样的。然而,由于碰撞攻击的存在,MD5不再适用于安全敏感的应用,如密码存储,现在更倾向于使用SHA-2或SHA-3等更安全的哈希算法。 实例中可能包含了一个步骤...

Global site tag (gtag.js) - Google Analytics