使用摘要流获取文件的MD5

摘要流是过滤流的一种,使用它可以再读取和写入流时获取流的摘要信息(MD5/SHA).

使用摘要流包装流时,需要额外传递一个MessageDigest对象,

MessageDigest md=MessageDigest.getInstance("MD5");
DigestInputStream dis=new DigestInputStream(in, md);

摘要流复写了流的read、write方法,方法内部调用MessageDigest对象的upate()来更新摘要信息

public int read() throws IOException {
        int ch = in.read();
        if (on && ch != -1) {
            digest.update((byte)ch);
        }
        return ch;
    }

调用MessageDigest对象的getDigest()可以获得摘要信息的byte[],通常情况我们需要获取字符串形式的MD5值,所以需要进行转换

/**
     * 将字节数组转为十六进制字符串
     *
     * @param bytes
     * @return 返回16进制字符串
     */
    public static String byteArrayToHex(byte[] bytes) {
        // 字符数组,用来存放十六进制字符
        char[] hexReferChars = { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘,
                ‘9‘, ‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘ };
        // 一个字节占8位,一个十六进制字符占4位;十六进制字符数组的长度为字节数组长度的两倍
        char[] hexChars = new char[bytes.length * 2];
        int index = 0;
        for (byte b : bytes) {
            // 取字节的高4位
            hexChars[index++] = hexReferChars[b >>> 4 & 0xf];
            // 取字节的低4位
            hexChars[index++] = hexReferChars[b & 0xf];
        }
        return new String(hexChars);
    }

使用摘要流获取文件的MD5,布布扣,bubuko.com

时间: 2024-10-23 19:26:05

使用摘要流获取文件的MD5的相关文章

获取文件的MD5码(C#)

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Test {     public class MD5Code     {         /// <su

Python写自动化之获取文件的MD5值

使用Python 获取文件的MD5 值是一件很简单的事情,Python 提供了md5 和 hashlib 两个模块,都可以获取到文件的md5值. 代码如下: #获取文件的MD5值,适用于小文件 def getFileMD5(self,filepath): if self.isFile(filepath): f = open(filepath,'rb') md5obj = hashlib.md5() md5obj.update(f.read()) hash = md5obj.hexdigest()

Android获取文件的MD5值

package my.bag; import java.io.File; import java.io.FileInputStream; import java.math.BigInteger; import java.security.MessageDigest; import java.util.HashMap; import java.util.Map; import android.app.Activity; import android.os.Bundle; import androi

获取文件的MD5值,比较两个文件是否完全相同

代码: public class MD5Test { public static void main(String[] args) { String s1 = MD5Test.MD5Operation(new File("E:/a.csv")); String s2 = MD5Test.MD5Operation(new File("E:/data/a.csv")); System.out.println(s1.equals(s2)); } public final

获取文件的MD5码

/// <summary> /// 获取文件的MD5码 /// </summary> /// <param name="filePath">文件路径</param> /// <returns>MD5码</returns> private static string GetFileMD5(string filePath) { try { var file = new FileStream(filePath, File

iOS开发之获取文件的md5值

我们经常有下载文件上的需求 为了安全我们经常需要对文件进行md5校验 那我就来给大家分享一个很方便的获取文件md5值得方法. 首先需要引用系统库文件 #include <CommonCrypto/CommonDigest.h> /** 获取文件的md5值*/ + (NSString *)getFileMD5StrFromPath:(NSString *)path { NSFileManager *fileManager = [NSFileManager defaultManager]; if(

在浏览器端获取文件的MD5值

http://www.jianshu.com/p/940a9226fbbd 前几天接到一个奇怪的需求,要在web页面中计算文件的md5值,还好这个项目是只需兼容现代浏览器的,不然要坑死了. 其实对文件进行md5,对于后端来说是及其简单的.比如使用Node.js,只要下面几行代码就可以了: var fs= require('fs'); var crypto = require('crypto'); function md5File(path, callback) { fs.readFile(pat

获取文件的MD5值

package com.example.assetsdemo; import java.io.File; import java.io.FileInputStream; import java.math.BigInteger; import java.security.MessageDigest; import java.util.HashMap; import java.util.Map; public class FileDigest { /** * 获取单个文件的MD5值! * * @pa

Windows下获取文件的md5码的方法

1.certutil 命令简介 本来想找一个工具 算一个文件的md5 或者是sha 值来着. 找到一个说法是 可以使用 windows 自带的命令行来处理 具体命令 certutil -hashfile 容器与容器云(第2版).pdf sha512 相关的命令帮助为: >certutil -hashfile -? 用法: CertUtil [选项] -hashfile InFile [HashAlgorithm] 通过文件生成并显示加密哈希 选项: -Unicode -- 以 Unicode 编