【转】java MessageDigest类的作用 :提供信息摘要 算法( MD5 或 SHA 等)的功能
一、结构和概述:
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 等)的功能的更多相关文章
- MessageDigest类
public abstract class MessageDigest extends MessageDigestSpi API中的中英文对照简介(未完) java.security.MessageD ...
- 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA
1.Java的安全体系架构 1.1 Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.sec ...
- Java的单向加密算法MD5和SHA——加密和解密
出自:http://www.cnblogs.com/onetwo/p/3875551.html 1.JDK中MD5和SHA加密的主要类 在JDK6.0中,与MD5与SHA密切相关的几个类的类图如下: ...
- Java五子棋小游戏(控制台纯Ai算法)
Java五子棋小游戏(控制台纯Ai算法) 继续之前的那个五子棋程序 修复了一些已知的小Bug 这里是之前的五子棋程序 原文链接 修复了一些算法缺陷 本次增加了AI算法 可以人机对战 也可以Ai对Ai看 ...
- Java中Class和单例类的作用与类成员的理解
Java中Class类的作用与深入理解 在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识.这个信息跟踪着每个对象所属的类.JVM利用运行时信息选择相应的方法执行.而保存 ...
- 深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因
声明:本博客为原创博客,未经同意,不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(原文链接为http://blog.csdn.net/bettarwang/article/det ...
- JAVA基础加强(张孝祥)_类加载器、分析代理类的作用与原理及AOP概念、分析JVM动态生成的类、实现类似Spring的可配置的AOP框架
1.类加载器 ·简要介绍什么是类加载器,和类加载器的作用 ·Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader ...
- Java学习笔记(七)——获取类中方法的信息,java的LinkedList
[前面的话] 在实际项目中学习知识总是最快和最有效的,既能够较好的掌握知识,又能够做出点东西,还是简单的知识总结,最近一直在总结笔记,写的东西还是比较水,希望慢慢可以写出一些干货. 学习过程中的小知识 ...
- Java 自带的加密类MessageDigest类(加密MD5和SHA)
Java 自带的加密类MessageDigest类(加密MD5和SHA) - X-rapido的专栏 - CSDN博客 https://blog.csdn.net/xiaokui_wingfly/ar ...
随机推荐
- Noip2016Day2T3 愤怒的小鸟
题目链接 problem 平面内有n个点,每次可以确定一条过原点且开口向上的抛物线,将这条抛物线上所有的点都删去.问最少需要删几次可以删掉全部的点. solution n比较小,直接状压一下.因为已经 ...
- Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) F2. Wrong Answer on test 233 (Hard Version) dp 数学
F2. Wrong Answer on test 233 (Hard Version) Your program fails again. This time it gets "Wrong ...
- java之三元运算符
逻辑运算 ? m : n;如果逻辑运算为真,则返回m,否则返回n 实例: 判断i,j两个数的大小,如果a较大,则输出1,否则输出0: 找到i,j,k三个数中的最大值: public class Tes ...
- Android Monkey的用法(一)
Monkey 简介 ü Monkey 是一个命令行工具,可以运行在 Android 模拟器里或真实设备中.它可以向系统发送伪随机(pseudo-random)的用户事件流(如按键输入.触摸屏输入 ...
- 02-Git远程仓库Github
1.Git远程仓库 (Gitgub网站作为远程代码仓库时的操作和本地代码仓库一样的,只是仓库位置不同而已) 需要准备的东西: 1.准备Git源代码仓库https://github.com/ 2.准备李 ...
- 【计算机网络】如何让Ajax通信过程携带Cookie呢?
Ajax 1. 介绍一下ajax并代码实现 1.1 基本概念 JavaScript 和XML(Asynchronous JavaScript And XML).简单点说,就是使用 XMLHttpReq ...
- ACR122U读卡器在win7以上系统使用过程中的设置项
发现ACR122U这个读卡器在进行nested破解的时候总是卡死,换了N个驱动程序都不行. 后发现是windows系统因智能卡的即插即用设置导致的问题,可以通过组策略的设置搞定. gpedit.msc ...
- C#截图操作(几种截图方法)
公共函数获取屏幕截图private Bitmap GetScreenCapture(){ Rectangle tScreenRect = new Rectangle(0, 0, Screen.Prim ...
- Revit二次开发 屏蔽复制构件产生的重复类型提示窗
做了很久码农,也没个写博客的习惯,这次开始第一次写博客. 这个问题也是折腾了我接近一天时间,网上也没有任何的相关博文,于是决定分享一下,以供同样拥有此问题的小伙伴们参考. 内容源于目前在做的一个项目, ...
- PHP面试题2019年滴滴出行工程师面试题及答案解析
一.单选题(共30题,每题5分) 1.下列关于PHP垃圾回收的说法,错误的是? A.开启/关闭垃圾回收机制可以通过修改php配置实现 B.可以在程序中使用gc_enable() 和 gc_disabl ...