`

java获取大文件的MD5、SHA1,CRC32码

阅读更多

原文链接:http://blog.csdn.net/mylmhcj/article/details/50616908

 

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

import java.io.File;  

import java.io.FileInputStream;  

import java.io.FileNotFoundException;  

import java.io.IOException;  

import java.nio.MappedByteBuffer;  

import java.nio.channels.FileChannel;  

import java.security.MessageDigest;  

import java.security.NoSuchAlgorithmException;  

import java.util.zip.CRC32;  

  

public class FileSafeCode {  

    /** 

     * 计算大文件 md5获取getMD5(); SHA1获取getSha1() CRC32获取 getCRC32() 

     */  

    protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6',  

            '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };  

    public static MessageDigest messagedigest = null;  

  

    /** 

     * 对一个文件获取md5值 

     *  

     * @return md5串 

     * @throws NoSuchAlgorithmException 

     */  

    public static String getMD5(File file) throws IOException,  

            NoSuchAlgorithmException {  

  

        messagedigest = MessageDigest.getInstance("MD5");  

        FileInputStream in = new FileInputStream(file);  

        FileChannel ch = in.getChannel();  

        MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0,  

                file.length());  

        messagedigest.update(byteBuffer);  

        return bufferToHex(messagedigest.digest());  

    }  

  

     /**  

     * @param target 字符串 求一个字符串的md5值 

     * @return md5 value 

     */  

    public static String StringMD5(String target) {  

        return DigestUtils.md5Hex(target);  

    }  

      

    /*** 

     * 计算SHA1码 

     *  

     * @return String 适用于上G大的文件 

     * @throws NoSuchAlgorithmException 

     * */  

    public static String getSha1(File file) throws OutOfMemoryError,  

            IOException, NoSuchAlgorithmException {  

        messagedigest = MessageDigest.getInstance("SHA-1");  

        FileInputStream in = new FileInputStream(file);  

        FileChannel ch = in.getChannel();  

        MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0,  

                file.length());  

        messagedigest.update(byteBuffer);  

        return bufferToHex(messagedigest.digest());  

    }  

  

    /** 

     * 获取文件CRC32码 

     *  

     * @return String 

     * */  

    public static String getCRC32(File file) {  

        CRC32 crc32 = new CRC32();  

        // MessageDigest.get  

        FileInputStream fileInputStream = null;  

        try {  

            fileInputStream = new FileInputStream(file);  

            byte[] buffer = new byte[8192];  

            int length;  

            while ((length = fileInputStream.read(buffer)) != -1) {  

                crc32.update(buffer, 0, length);  

            }  

            return crc32.getValue() + "";  

        } catch (FileNotFoundException e) {  

            e.printStackTrace();  

            return null;  

        } catch (IOException e) {  

            e.printStackTrace();  

            return null;  

        } finally {  

            try {  

                if (fileInputStream != null)  

                    fileInputStream.close();  

            } catch (IOException e) {  

                e.printStackTrace();  

            }  

        }  

    }  

  

    public static String getMD5String(String s) {  

        return getMD5String(s.getBytes());  

    }  

  

    public static String getMD5String(byte[] bytes) {  

        messagedigest.update(bytes);  

        return bufferToHex(messagedigest.digest());  

    }  

  

    /** 

     * @Description 计算二进制数据 

     * @return String 

     * */  

    private static String bufferToHex(byte bytes[]) {  

        return bufferToHex(bytes, 0, bytes.length);  

    }  

  

    private static String bufferToHex(byte bytes[], int m, int n) {  

        StringBuffer stringbuffer = new StringBuffer(2 * n);  

        int k = m + n;  

        for (int l = m; l < k; l++) {  

            appendHexPair(bytes[l], stringbuffer);  

        }  

        return stringbuffer.toString();  

    }  

  

    private static void appendHexPair(byte bt, StringBuffer stringbuffer) {  

        char c0 = hexDigits[(bt & 0xf0) >> 4];  

        char c1 = hexDigits[bt & 0xf];  

        stringbuffer.append(c0);  

        stringbuffer.append(c1);  

    }  

  

    public static boolean checkPassword(String password, String md5PwdStr) {  

        String s = getMD5String(password);  

        return s.equals(md5PwdStr);  

    }  

 

}  

分享到:
评论

相关推荐

    计算文件hash值的源代码,包含crc,md2,md4,md5,sha,sha1,sha256,ra-Calcu

    if(strcmp(szTemp, "crc32" ) == 0) hashmgr.SelectAlgorithm(HASHID_CRC32, true); if(strcmp(szTemp, "nocrc32" ) == 0) hashmgr.SelectAlgorithm(HASHID_CRC32, false); if(strcmp(szTemp, "fcs16" ) == 0...

    Android开发中使用CRC校验

    首先创建`CRC32`对象,然后调用`update()`方法传递数据,最后调用`getValue()`获取校验码。 - **自定义实现**:对于更复杂的CRC校验需求,如自定义CRC多项式,可能需要自定义算法实现。这通常涉及到位操作和移位...

    Check:Java写的编码校验小工具。可以计算文本、文件的MD5、SHA-1、CRC32等校验值

    这个工具主要用于计算文本和文件的多种校验值,包括MD5、SHA-1以及CRC32。这些校验值在信息技术领域中扮演着至关重要的角色,确保数据的完整性和一致性。 MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希...

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

    1. **CRC32**:Java标准库中的`java.util.zip.CRC32`类可以用来计算CRC32校验码。它是一个长整型变量,通过对输入数据的每一位进行累加计算,最后得到的值就是CRC32校验码。 ```java CRC32 crc32 = new CRC32(); ...

    基于Java开发的校验码工具.zip

    总结,这个基于Java的校验码工具结合了MD5、SHA1和CRC32三种校验算法,通过Swing构建的用户界面,提供了一个直观易用的平台来验证数据的完整性和一致性。无论是在个人工作还是企业环境中,这样的工具都能发挥重要的...

    md5 哈希算法 数据完整性验证工具

    在提供的压缩包文件中,`hasher.exe`可能是一个应用程序,用于计算文件的MD5、SHA1和CRC散列值。用户可以使用这个工具对文件进行校验,确保下载的文件与原始源文件一致,防止因网络传输错误或恶意篡改导致的数据不...

    常用的hash算法(java实现)

    在Java中,`java.util.zip.CRC32`类提供了CRC32的实现: ```java import java.util.zip.CRC32; public class CRC32Example { public static long getCRC32(String input) { CRC32 crc32 = new CRC32(); crc...

    同一个文件在windows和linux下计算md5哈希不一致的原因及解决方法

    然而,有时在Windows和Linux系统下计算同一个文件的MD5哈希值可能会得到不一致的结果,这主要是由于文件处理方式和传输过程中的差异造成的。 1. **文件读取方式**: 在Windows和Linux系统中,文件读取方式的不同...

    Android开发中使用CRC校验.rar

    首先创建`CRC32`实例,然后调用`update()`方法将数据逐字节或逐块传递给它,最后通过`getValue()`方法获取CRC校验码。 ```java CRC32 crcCalculator = new CRC32(); byte[] data = ... // 待校验的数据 ...

    HashFiles(计算文件各种校验参数)1.10绿色版

    HashFiles是一款免费的实用程序,用来计算CRC32,MD5文件或多个文件的​​SHA256和SHA1哈希有用。你不会觉得很难使用的应用程序,它的用户界面是不言自明,需要的用户快来下载吧。 虽然有一个专门的按钮,你可以用...

    JAVA文件传输(论文+源代码).zip

    6. **数据校验**:为了确保文件传输的准确性,通常会使用CRC校验或MD5/SHA哈希值来验证文件完整性。Java提供Checksum接口和MessageDigest类,可以方便地计算和比较这些校验值。 7. **文件压缩与解压缩**:Java的...

    JPassword Recovery Tool:用于压缩档案和 md5、sha-1/2 哈希的密码恢复工具-开源

    它还可以对 Windows 和 Linux 的 MD2、MD5、SHA-1 和 SHA-2 哈希(SHA-256、SHA-384、SHA-512)、CRC16、CRC32、CRC64 和 Adler32 哈希密码进行暴力破解。 它需要 java 7u4 及更高版本,以及 7-zip v9.20 及更高...

    javautil工具类大全

    校验码如CRC、MD5或SHA用于检测数据传输过程中的错误。 17. **JSON处理**: JSON是常见的数据交换格式,Java有Gson、Jackson、JSON-P和JSON-Simple等多个库用于解析和生成JSON。 综上所述,这个“java工具类.java...

    jdk-13.0.2_windows-x64_bin.exe-JDK13Java开发工具包Windows版

    JDK是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境 Java SE Development Kit 13 - Downloads ...CRC32 :49C8DC58

    Java简单模拟QQ

    为了保证文件完整性和安全性,可能需要使用校验和(如CRC32)以及SSL/TLS加密。 5. **GUI界面** QQ的界面通常是图形用户界面(GUI),在Java中,我们可以使用Swing或JavaFX库来创建。Swing提供了丰富的组件,如...

    imhex-功能强大的十六进制编辑器,开源软件

    文件哈希支持:CRC16、CRC32、MD4、MD5、SHA-1、SHA-224、SHA-256、SHA-384和SHA-512。反汇编程序支持多种不同的体系结构:ARM32 (ARM, Thumb, Cortex-M, AArch32)、ARM64、MIPS (MIPS32, MIPS64, MIPS32R6, Micro)...

    ImHex:一款功能强大的十六进制编辑器

    文件哈希支持:CRC16、CRC32、MD4、MD5、SHA-1、SHA-224、SHA-256、SHA-384和SHA-512。 反汇编程序支持多种不同的体系结构:ARM32 (ARM, Thumb, Cortex-M, AArch32)、ARM64、MIPS (MIPS32, MIPS64, MIPS32R6, Micro...

    simhash-java Java实现simhash算法的简单实现.zip

    常用的哈希函数有CRC32、MD5、SHA系列等。 5. **组合哈希值**:将所有块的哈希值组合起来,形成最终的SimHash值。这个组合过程通常是通过异或运算来完成的,因为异或操作具有“相同为0,不同为1”的特性,这有利于...

    ImHex软件.zip

    软件说明: ...具有自定义初始值和多项式的 CRC16 和 CRC32 MD4、MD5 SHA-1、SHA-224、SHA-256、SHA-384、SHA-512 支持许多不同架构的反汇编程序 ARM32(ARM、Thumb、Cortex-M、AArch32) ARM64 MIP

Global site tag (gtag.js) - Google Analytics