一、结构和概述:

java.lang.Object
java.security.MessageDigestSpi
java.security.MessageDigest
声明:public abstract class MessageDigest extends MessageDigestSpi

此 MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收 任意大小的数据,并输出固定长度的哈希值。 MessageDigest 对象开始被初始化。该对象通过使用 update 方法处理数据。任何时候都可以调用 reset 方法重置摘要。一旦 所有需要更新的数据都已经被更新了,应该调用 digest 方法之一完成哈希计算。 对于给定数量的更新数据,digest 方法只能被调用一次。在调用 digest 之后,MessageDigest 对象被重新设置成其初始状态。 该实现可随意选择是否实现 Cloneable 接口。客户端应用程可以通过尝试复制和捕获 CloneNotSupportedException 来测试可复制性:

    MessageDigest md = MessageDigest.getInstance(“SHA”);  

    try {
md.update(toChapter1);
MessageDigest tc1 = md.clone();
byte[] toChapter1Digest = tc1.digest();
md.update(toChapter2);
…etc.
} catch (CloneNotSupportedException cnse) {
throw new DigestException(“couldn’t make digest of partial content”);
}

如果给定的实现是不可复制的,而事先已经知道摘要的数目,则仍然能够通过实例化几个实例计算中间摘要。 由于历史原因,此类是抽象类,是从 MessageDigestSpi 扩展的。应用程序开发人员只需注意在此 MessageDigest 类中定义 的方法;超类中的所有方法是供希望提供自己的信息摘要算法实现的加密服务提供者使用的。

二、构造方法


protected MessageDigest(String algorithm)   创建具有指定算法名称的信息摘要。 
参数:algorithm - 摘要算法的标准名称。

三、方法详细

1、public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
返回实现指定摘要算法的 MessageDigest 对象。 

此方法从首选 Provider 开始遍历已注册安全提供者列表。返回封装取自第一个 Provider 的 MessageDigestSpi 实现的新 MessageDigest 对象,第一个 Provider 支持指定算法。 注意,可以通过 Security.getProviders() 方法获取已注册提供者列表。

参数:algorithm - 所请求算法的名称。

返回:实现指定算法的 Message Digest 对象。


抛出:NoSuchAlgorithmException - 如果没有 Provider 支持指定算法的 MessageDigestSpi 实现

2、public static MessageDigest getInstance(String algorithm, String provider)   throws NoSuchAlgorithmException,  NoSuchProviderException

返回实现指定摘要算法的 MessageDigest 对象。

返回封装 MessageDigestSpi 实现的新 MessageDigest 对象,该实现取自指定提供者。指定提供者必须在安全提供者列表中注册。

注意,可以通过 Security.getProviders() 方法获取已注册提供者列表。

参数:algorithm - 所请求算法的名称。provider - 提供者的名称。

返回:实现指定算法的 MessageDigest 对象。 抛出:NoSuchAlgorithmException - 如果指定算法的 MessageDigestSpi 实现不能从指定提供者获得。             NoSuchProviderException - 如果指定提供者未在安全提供者列表中注册。 IllegalArgumentException - 如果提供者的名称为 null 或空。

3、public static MessageDigest getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException

返回实现指定摘要算法的 MessageDigest 对象。

返回封装 MessageDigestSpi 实现的新 MessageDigest 对象,该实现取自指定 Provider 对象。注意,指定 Provider 对象无需在提供者列表中注册。

参数: algorithm - 所请求算法的名称。provider - 提供者。

返回: 实现指定算法的 MessageDigest 对象。 抛出:NoSuchAlgorithmException - 如果指定算法的 MessageDigestSpi 实现不能从指定的提供者对象获得。 IllegalArgumentException - 如果指定的提供者为 null。

4、public final Provider getProvider()   返回此信息摘要对象的提供者。

5、public void update(byte input)       使用指定的字节更新摘要。

参数:input - 用于更新摘要的字节。

6、public void update(byte[] input,  int offset,  int len)     使用指定的 byte 数组,从指定的偏移量开始更新摘要。

参数: input - byte 数组。

      offset - byte 数组中的偏移量,操作从此处开始。

      len - 要使用的字节数,始于 offset

7、public void update(byte[] input)     使用指定的 byte 数组更新摘要。

参数:input - byte 数组。

8、public final void update(ByteBuffer input)

使用指定的 ByteBuffer 更新摘要。使用始于 input.position() 处的 input.remaining() 个字节更新摘要。一旦返回,该缓冲区的位置将等于它的界限;它的界限将不会更改。

参数: input - ByteBuffer

10、public byte[] digest()      通过执行诸如填充之类的最终操作完成哈希计算。在调用此方法之后,摘要被重置。

返回:存放哈希值结果的 byte 数组。

11、public int digest(byte[] buf,int offset, int len)  throws DigestException

通过执行诸如填充之类的最终操作完成哈希计算。在调用此方法之后,摘要被重置。

参数: buf - 存放计算摘要的输出缓冲区 offset - 输出缓冲区中的偏移量,从此处开始存储摘要。 len - 在 buf 中分配给摘要的字节数

返回: 放到 buf 中的字节数

抛出:DigestException - 如果发生错误。

12、public byte[] digest(byte[] input)

使用指定的 byte 数组对摘要进行最后更新,然后完成摘要计算。也就是说,此方法首先调用 update(input),向 update 方法传递 input 数组,然后调用 digest()

参数: input - 在完成摘要计算前要更新的输入。

返回: 存放哈希值结果的 byte 数组。

13、public String toString()    返回此信息摘要对象的字符串表示形式。

覆盖:Object 中的 toString

返回: 该对象的字符串表示形式。

14、public static boolean isEqual(byte[] digesta, byte[] digestb)    比较两个摘要的相等性。做简单的字节比较。

参数: digesta - 要比较的摘要之一。

digestb - 要比较的另一个摘要。

返回: 如果摘要相等,则返回 true;否则返回 false

15、public void reset()     重置摘要以供再次使用。

16、public final String getAlgorithm()   返回标识算法的独立于实现细节的字符串。此名称应该是标准的 Java 安全名称(如 “SHA”、”MD5” 等等)。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。

返回:算法的名称

17、public final int getDigestLength()   返回以字节为单位的摘要长度,如果提供者不支持此操作并且实现是不可复制的,则返回 0。

返回: 以字节为单位的摘要长度,如果提供者不支持此操作并且实现是不可复制的,则返回 0。

18、public Object clone()  throws CloneNotSupportedException   如果实现是可复制的,则返回一个副本。

覆盖:MessageDigestSpi 中的 clone

返回:如果实现是可复制的,则返回一个副本。

抛出:CloneNotSupportedException - 如果对一个不支持 Cloneable 的实现调用此方法。

转载:https://blog.csdn.net/qq_35794278/article/details/80826267#

【转】java MessageDigest类的作用 :提供信息摘要 算法( MD5 或 SHA 等)的功能的更多相关文章

  1. MessageDigest类

    public abstract class MessageDigest extends MessageDigestSpi API中的中英文对照简介(未完) java.security.MessageD ...

  2. 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA

    1.Java的安全体系架构 1.1           Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.sec ...

  3. Java的单向加密算法MD5和SHA——加密和解密

    出自:http://www.cnblogs.com/onetwo/p/3875551.html 1.JDK中MD5和SHA加密的主要类 在JDK6.0中,与MD5与SHA密切相关的几个类的类图如下:  ...

  4. Java五子棋小游戏(控制台纯Ai算法)

    Java五子棋小游戏(控制台纯Ai算法) 继续之前的那个五子棋程序 修复了一些已知的小Bug 这里是之前的五子棋程序 原文链接 修复了一些算法缺陷 本次增加了AI算法 可以人机对战 也可以Ai对Ai看 ...

  5. Java中Class和单例类的作用与类成员的理解

    Java中Class类的作用与深入理解 在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识.这个信息跟踪着每个对象所属的类.JVM利用运行时信息选择相应的方法执行.而保存 ...

  6. 深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因

    声明:本博客为原创博客,未经同意,不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(原文链接为http://blog.csdn.net/bettarwang/article/det ...

  7. JAVA基础加强(张孝祥)_类加载器、分析代理类的作用与原理及AOP概念、分析JVM动态生成的类、实现类似Spring的可配置的AOP框架

    1.类加载器 ·简要介绍什么是类加载器,和类加载器的作用 ·Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader ...

  8. Java学习笔记(七)——获取类中方法的信息,java的LinkedList

    [前面的话] 在实际项目中学习知识总是最快和最有效的,既能够较好的掌握知识,又能够做出点东西,还是简单的知识总结,最近一直在总结笔记,写的东西还是比较水,希望慢慢可以写出一些干货. 学习过程中的小知识 ...

  9. Java 自带的加密类MessageDigest类(加密MD5和SHA)

    Java 自带的加密类MessageDigest类(加密MD5和SHA) - X-rapido的专栏 - CSDN博客 https://blog.csdn.net/xiaokui_wingfly/ar ...

随机推荐

  1. Sharding-JDBC:单库分表的实现

    剧情回顾 前面,我们一共学习了读写分离,垂直拆分,垂直拆分+读写分离.对应的文章分别如下: Sharding-JDBC:查询量大如何优化? Sharding-JDBC:垂直拆分怎么做? 通过上面的优化 ...

  2. 01-Git单人本地仓库操作

    Git源代码管理 Git(多人协同开发同一个项目),作用就是源代码管理,为什么需要源代码管理呢,方便多人协同开发,并且方便版本控制. Git管理源代码特点: 1.Git是分布式管理.服务器和客户端都有 ...

  3. 使用configparser模块进行封装,构造配置文件处理器

    from configparser import ConfigParser class HandleConfig: ''' 定义一个配置文件处理类 ''' def __init__(self, fil ...

  4. F5的作用

    F5 F5的全称是F5-BIG-IP-GTM,是最流行的硬件负载均衡设备,其并发能力达到百万级.F5的主要特性包括: 多链路的负载均衡和冗余 可以接入多条ISP链路,在链路之间实现负载均衡和高可用. ...

  5. url中拼接中文参数,后台接收为乱码的问题

    遇到在URL中拼接中文的参数,后台拿到的数据为乱码的问题,这里来说一下问题出现的原因与解决方法. 大家比较关心的应该是解决的方法,因此先说解决方法. 解决方法 解决的方法是在客户端对这个中文参数进行编 ...

  6. win7系统下安装Ubuntu18.04组成双系统

    最近在闲鱼上花了350大洋淘到了一台tinkpad sl510,这大概是一台发布于2009年的一台电脑了吧,处理器是酷睿二t440,2Gddr3的显卡,让我有点意外的是这台电脑的硬盘是7200转的32 ...

  7. C# get files and write the files full name in txt

    static void GetAllFiles() { string path = "filepath"; var allFiles = Directory.GetFiles(pa ...

  8. c#微信公众号开发一----基本设置,服务器配置token验证,获取timestamp/nonce/signature

    一.c#微信公众号开发----基本设置 参考微信官方文档 https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Acce ...

  9. Implement Custom Business Classes and Reference Properties 实现自定义业务类和引用属性(XPO)

    In this lesson, you will learn how to implement business classes from scratch. For this purpose, the ...

  10. 禁止ViewPager滑动

    实现如下: public class NoScrollViewPager extends ViewPager { public NoScrollViewPager (Context context) ...