一、结构和概述:

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. python3的ExecJS安装使用

    参考官方文档安装 pip3 install PyExecJS 代码编写 import execjs ctx = execjs.compile(""" function a ...

  2. 【转】Java中的关键字 transient

    阅读目录 先解释下Java中的对象序列化 关于transient关键字 举个例子 参考资料 先解释下Java中的对象序列化 在讨论transient之前,有必要先搞清楚Java中序列化的含义: Jav ...

  3. iOS: 创建静态库,实现自己的API私有使用

    一.介绍 在开发中经常使用到第三方的静态框架,格式基本上就是.framework和.a格式的.使用时,会发现我们只能使用无法修改,这就是静态框架的一个好处,私有性.内部实现的代码只有公开者本人知晓,对 ...

  4. IT兄弟连 Java语法教程 关系运算符

    关系运算符用来判定一个操作数与另外一个操作数之间的关系.特别是,它们可以判定相等和排序关系.表7中列出了关系运算符. 表7  关系运算符 关系运算符的结果为布尔值.关系运算符最常用与if语句和各种循环 ...

  5. C++ delete 和 delete []的区别

    转载自https://blog.csdn.net/cbNotes/article/details/38900799 1.我们通常从教科书上看到这样的说明:delete 释放new分配的单个对象指针指向 ...

  6. springboot热启动中那些不为人知的东东

    在springboot热启动中,大家都知道在pom文件中配置devtools,但是当这个服务特别大,或者引入的包特别多的时候,重启一下就特别慢,如果开发的PC的内存和cpu如果不给里的h话,系统就卡主 ...

  7. Google_PWA_ServiceWork_渐进式 Web 应用_给应用提供离线体验

    前言:今天结识了google PWA提供的一个对移动端Web应用提供离线体验的一个功能,感觉很有用.我这里不分享自己的写法和代码.官网文档说的很详细,直接粘过来大家看吧. 推荐官网地址:你的第一个渐进 ...

  8. go-gtk环境配置

    go-gtk环境配置(用于go的图形化界面) 弄了一天,终于把这个环境给搭建好了,差不多就是安装msys2->安装gtk的各个版本->安装mingw(我原来装有但不影响,因为重复了,环境变 ...

  9. 五个常用的CSS简写

    1,margin/padding. (演示仅为margin,padding同理,需注意的是padding没有auto) 2.background. background: [background-co ...

  10. 自学_HTML<一>

    HTML HTML(HyperText Markup Language):描述网页长什么样子.有什么内容的一个文本.查看网页的描述内容(HTML)的方式:使用IE浏览器的话,在网页上点击右键,选择&q ...