MessageDigest、DigestInputStream、DigestOutputStream简介

MessageDigest

MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。 
    MessageDigest 对象开始被初始化。该对象通过使用 update 方法处理数据。任何时候都可以调用 reset 方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用 digest 方法之一完成哈希计算。 
    对于给定数量的更新数据,digest 方法只能被调用一次。在调用 digest 之后,MessageDigest 对象被重新设置成其初始状态。 JDK6.0支持MD2/MD5/SHA-1(SHA)/SHA-256/SHA-384/SHA-512六种算法,名称不区分大小写。

DigestInputStream

使用读取流的方式完成摘要更新,调用on(boolean on)方法开启和关闭摘要功能。如果on(false),则DigestInputStream就变成了一般的输入流。默认摘要功能是开启的,如果开启了摘要功能,调用read方法时,将调用MessageDigest 类的update方法更新摘要。

DigestOutputStream

使用写入流的方式完成摘要更新,调用on(boolean on)方法开启和关闭摘要功能。如果on(false),则DigestOutputStream就变成了一般的输出流。默认摘要功能是开启的,如果开启了摘要功能,调用write方法时,将调用MessageDigest 类的update方法更新摘要。

示例

    public static void main(String[] args) throws Exception {
        byte[] bytes = "测试".getBytes();
        MessageDigest messageDigest = MessageDigest.getInstance("MD5");
        messageDigest.update(bytes);

        MessageDigest messageDigest1 = MessageDigest.getInstance("MD5");
        DigestInputStream digestInputStream = new DigestInputStream(new ByteArrayInputStream(bytes), messageDigest1);
        digestInputStream.read(bytes, 0, bytes.length);
        System.out.println(MessageDigest.isEqual(messageDigest.digest(), digestInputStream.getMessageDigest().digest()));
        digestInputStream.close();

        MessageDigest messageDigest2 = MessageDigest.getInstance("MD5");
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        System.out.println(byteArrayOutputStream.toString());
        DigestOutputStream digestOutputStream = new DigestOutputStream(byteArrayOutputStream, messageDigest2);
        digestOutputStream.write(bytes, 0, bytes.length);
        digestOutputStream.getMessageDigest().digest();
        System.out.println(byteArrayOutputStream.toString());
        digestOutputStream.flush();
        digestOutputStream.close();
    }

输出

true

测试
时间: 2024-10-04 21:39:18

MessageDigest、DigestInputStream、DigestOutputStream简介的相关文章

Java利用MessageDigest提供的MD5算法加密字符串或文件

MD5是常用的加密算法,也经常用于校验信息完整,如文件的完整性.用术语讲,MD5是一种消息摘要算法(Message Digest Algorithm).另外还有一种常用的消息摘要算法SHA1.如果想了解这些的话,可以去百度百科:MD5.SHA1.消息摘要算法. Java已经实现了MD5.SHA1算法.利用java.security.MessageDigest类就可以获取字符串和文件的MD5以及SHA1结果. 1.字符串的MD5(下面的代码有详细注释) public static String s

Java安全之消息摘要

消息摘要又称数据指纹,主要用于数据的完整性校验,例如当你在apache下载一个jar包的时候,在下载列表中除了会提供下载链接,还会提供MD5摘要值,当你在下载完成后再对下载的文件计算摘要值,如果摘要值一致,则说明下载过程中没有发生数据丢失或更改,确保数据完整. 消息摘要的算法主要包含MD(Message Digest).SHA(Secure Hash Algorithm)和MAC(Message Authentication Code)共3大系列,也是数据签名的核心算法.MD系列包含MD2,MD

接口 Closeable

java.io 接口 Closeable public interface Closeable Closeable 是可以关闭的数据源或目标.调用 close 方法可释放对象保存的资源(如打开文件). 从以下版本开始:1.5 方法摘要  void  close() 关闭此流并释放与此流关联的所有系统资源. 方法详细信息 close void close() throws IOException 关闭此流并释放与此流关联的所有系统资源.如果已经关闭该流,则调用此方法无效. 抛出: IOExcept

java实现计算MD5

import java.io.FileInputStream; import java.security.DigestInputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Class { // 计算字符串的MD5 public static String conVertTextToMD5(String plainText) {

MessageDigest简介

本文博客原文 参考文章:http://blog.sina.com.cn/s/blog_4f36423201000c1e.html 一.概述 java.security.MessageDigest类用于为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法.简单点说就是用于生成散列码.信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值.关于信息摘要和散列码请参照<数字证书简介> MessageDigest 通过其getInstance系列静态函数来进行实例化和初始化

MD5算法--Java类MessageDigest实现

1 /* 2 * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. 3 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15 * 16 * 17 * 18 * 19 * 20 * 21 * 22 * 23 *

Java哈希散列算法简介 - MD5 &amp; SHA-512

Java哈希散列算法简介 - MD5 & SHA-512 在日常的开发工作中,我们常常会碰到这样的一个场景:我们需要有一种可靠的行之有效的方法来检验跟判断数据在传输过程当中的完整性.最常见的一种情况就是当我们传输文件的时候,由于网络故障或者其他的一些因素,可能会出现我们下载下来的文件不完整,这给我们日常的开发和维护带了一些难题:另外的一个较为常用的场景就是:有没有一种行之有效的方法让我们可以很方便的判断服务器上的文件是不是有最新的数据更新,比如我们现在的移动Hybird App开发,我们经常会发

MD5算法 简介

MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用. MD5功能 l 输入任意长度的信息,经过处理,输出为128位的信息(数字指纹): l 不同的输入得到的不同的结果(唯一性): l 根据128位的输出结果不可能反推出输入的信息(不可逆): MD5用途 1.防止被篡改: 1)比如发送一个电子文档,发送前,我先得到MD5的输出结果a.然后在对方收到电子文档后,对方也得到一个M

C#中简单调用MD5方法以及MD5简介

MD5简介:          MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2.MD3和MD4发展而来.MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法.换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数. MD5算法: 第一