摘要流是过滤流的一种,使用它可以再读取和写入流时获取流的摘要信息(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);
}

-----------------------------------------------------

2014.8.25

今天看到网上有使用BigInteger来进行byte[]和十六进制的转换:

        byte[] d=md5.digest();
BigInteger bigInt=new BigInteger(1,d);
System.out.println(bigInt.toString(16));

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

  1. swift 获取文件的Md5值

    获取文件的Md5值的方法如下 func md5File(url: URL) -> String? { let bufferSize = 1024 * 1024 do { //打开文件 let f ...

  2. JAVA 获取文件的MD5值大小以及常见的工具类

    /** * 获取文件的MD5值大小 * * @param file * 文件对象 * @return */ public static String getMD5(File file) { FileI ...

  3. iOS开发之获取文件的md5值

    我们经常有下载文件上的需求 为了安全我们经常需要对文件进行md5校验 那我就来给大家分享一个很方便的获取文件md5值得方法. 首先需要引用系统库文件 #include <CommonCrypto ...

  4. C#获取文件的MD5码

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Send ...

  5. 获取文件的MD5码(C#)

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Test ...

  6. Jav获取文件的MD5码,比较两个文件内容是否相同

    Jav获取文件的MD5码,比较两个文件内容是否相同 代码: System.out.println(DigestUtils.md5Hex(new FileInputStream(new File(&qu ...

  7. 就这样获取文件的MD5和大小

    纠结真蛋疼 判断一件事值不值得去做的唯一标准是这件事是不是令我纠结.如果纠结了,就不去做了!但是,人总要活着,又能怎样.谁说男人就没有那么几天...... 从极速妙传说起 在现在各大厂商都推出免费云盘 ...

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

    前几天接到一个奇怪的需求,要在web页面中计算文件的md5值,还好这个项目是只需兼容现代浏览器的,不然要坑死了. 其实对文件进行md5,对于后端来说是及其简单的.比如使用Node.js,只要下面几行代 ...

  9. ios获取文件的MD5值

    一般我们在使用http或者socket上传或者下载文件的时候,经常会在完成之后经行一次MD5值得校验(尤其是在断点续传的时候用的更 多),校验MD5值是为了防止在传输的过程当中丢包或者数据包被篡改,在 ...

随机推荐

  1. java1.8的几大新特性(二)

    七.Date APIJava 8 在包java.time下包含了一组全新的时间日期API.新的日期API和开源的Joda-Time库差不多,但又不完全一样,下面的例子展示了这组新API里最重要的一些部 ...

  2. C#中窗体的一些简单运用

    从今天开始,我们进入到学window form的知识,今天简单的学习了一些控件和事件的运用.没有什么很全面的理论,所以今天就总结下所写的程序.一个简单的注册页面程序   注册页面程序   要求:   ...

  3. html5 svg 第八章 文字text

    虽然它可能是真实的,每一个画面讲述了一个故事,这是完全正确的,用言语来帮助讲故事.因此,SVG有几个元素,让你将文本添加到您的图形. 文本术语 Text Terminology 在我们调查的主要方法添 ...

  4. uboot环境变量(设置bootargs向linux内核传递正确的参数)

    这是我uboot的环境变量设置,在该设置下可以运行initram内核(从内存下载到nandflash再运行),但是运行nfs根文件系统的时候一直出错,各种错误.查看了很多资料后猜想应该是uboot传递 ...

  5. android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)

    Android实现上拉加载更多功能以及下拉刷新功能, 采用了目前比较火的PullToRefresh,他是目前实现比较好的下拉刷新的类库. 目前他支持的控件有:ListView, ExpandableL ...

  6. [liu yanling]软件测试的分类

    按测试的对象或范围分类: 单元测试.文档测试.系统测试等. 按测试目的分类: 功能测试.回归测试.性能测试.可靠性测试.安全性测试和兼容性测试 等.  根据测试过程中被测软件是否被执行: 分为静态测试 ...

  7. mini2440触摸屏驱动分析

    mini2440驱动分析系列之 ---------------------------------------Mini2440触摸屏程序分析 By JeefJiang July,8th,2009 这是 ...

  8. Java 并发之线程安全

    写线程安全的代码,说白了就是管理一个类的共享的.可变的状态.只要有多于 1 个线程对类的状态进行写入,那么就必须用同步来协调这多个线程对状态的访问.对于一个没有状态的类来说(简单的理解就是只有方法没有 ...

  9. jquery ajax return值不能取得的解决方案

    jQuery ajax - ajax() 方法 http://www.w3school.com.cn/jquery/ajax_ajax.asp http://www.cnblogs.com/fqw19 ...

  10. 教程-Delphi操作快捷键

    ************************************************************** Delphi快捷键-全-高手用-南山古桃(新手)-同学共进 ******* ...