public abstract class MessageDigest extends MessageDigestSpi
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
课程中定义的方法; 超类中的所有方法都适用于希望提供自己的消息摘要算法实现的加密服务提供商。
Java平台的每个实现都需要支持以下标准的MessageDigest
算法:
MD5
SHA-1
SHA-256
DigestInputStream
, DigestOutputStream
Modifier | Constructor and Description |
---|---|
protected |
MessageDigest(String algorithm)
使用指定的算法名称创建消息摘要。
|
Modifier and Type | Method and Description |
---|---|
Object |
clone()
如果实现是可克隆的,则返回克隆。
|
byte[] |
digest()
通过执行最后的操作(如填充)来完成哈希计算。
|
byte[] |
digest(byte[] input)
使用指定的字节数组对摘要执行最终更新,然后完成摘要计算。
|
int |
digest(byte[] buf, int offset, int len)
通过执行最后的操作(如填充)来完成哈希计算。
|
String |
getAlgorithm()
返回一个标识算法的字符串,与实现细节无关。
|
int |
getDigestLength()
以字节为单位返回摘要的长度,如果提供程序不支持此操作,并且实现不可克隆,则返回0。
|
static MessageDigest |
getInstance(String algorithm)
返回实现指定摘要算法的MessageDigest对象。
|
static MessageDigest |
getInstance(String algorithm, Provider provider)
返回实现指定摘要算法的MessageDigest对象。
|
static MessageDigest |
getInstance(String algorithm, String provider)
返回实现指定摘要算法的MessageDigest对象。
|
Provider |
getProvider()
返回此消息摘要对象的提供者。
|
static boolean |
isEqual(byte[] digesta, byte[] digestb)
比较两个平等的消息。
|
void |
reset()
重置摘要以供进一步使用。
|
String |
toString()
返回此消息摘要对象的字符串表示形式。
|
void |
update(byte input)
使用指定的字节更新摘要。
|
void |
update(byte[] input)
使用指定的字节数组更新摘要。
|
void |
update(byte[] input, int offset, int len)
使用指定的字节数组从指定的偏移量开始更新摘要。
|
void |
update(ByteBuffer input)
使用指定的ByteBuffer更新摘要。
|
engineDigest, engineDigest, engineGetDigestLength, engineReset, engineUpdate, engineUpdate, engineUpdate
protected MessageDigest(String algorithm)
algorithm
- 摘要算法的标准名称。
看到该消息摘要部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准算法名称的信息。
public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
此方法遍历已注册的安全提供程序列表,从最优选的提供程序开始。 返回从支持指定算法的第一个Provider中封装MessageDigestSpi实现的新MessageDigest对象。
请注意,注册提供商的列表可以通过Security.getProviders()
方法检索 。
algorithm
- algorithm
的名称。
看到该消息摘要部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准算法名称的信息。
NoSuchAlgorithmException
- 如果没有提供者支持指定算法的MessageDigestSpi实现。
Provider
public static MessageDigest getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
返回从指定提供程序封装MessageDigestSpi实现的新MessageDigest对象。 指定的提供者必须在安全提供程序列表中注册。
请注意,注册提供商的列表可以通过Security.getProviders()
方法检索 。
algorithm
- algorithm
的名称。
看到该消息摘要部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准算法名称的信息。
provider
- 提供商的名称。
NoSuchAlgorithmException
- 如果指定的算法的MessageDigestSpi实现从指定的提供程序中不可用。
NoSuchProviderException
- 如果指定的提供程序未在安全提供程序列表中注册。
IllegalArgumentException
- 如果提供者名称为空或为空。
Provider
public static MessageDigest getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
返回从指定的Provider对象封装MessageDigestSpi实现的新MessageDigest对象。 请注意,指定的Provider对象不必在提供者列表中注册。
algorithm
- algorithm
的名称。
看到该消息摘要部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准算法名称的信息。
provider
- 提供商。
NoSuchAlgorithmException
- 如果指定的算法的MessageDigestSpi实现从指定的Provider对象不可用。
IllegalArgumentException
- 如果指定的提供者为空。
Provider
public final Provider getProvider()
public void update(byte input)
input
- 用于更新摘要的字节。
public void update(byte[] input, int offset, int len)
input
- 字节数组。
offset
- 从字节数组开始的偏移量。
len
- 要使用的字节数,从
offset
开始。
public void update(byte[] input)
input
- 字节数组。
public final void update(ByteBuffer input)
input.remaining()
起始字节input.position()
。
返回时,缓冲区的位置将等于其限制;
其限制将不会改变。
input
- ByteBuffer
public byte[] digest()
public int digest(byte[] buf, int offset, int len) throws DigestException
buf
- 计算摘要的输出缓冲区
offset
- 偏移到输出缓冲区开始存储摘要
len
- 为摘要分配的buf内的字节数
buf
的字节数
DigestException
- 如果发生错误。
public byte[] digest(byte[] input)
update(input)
,将输入数组传递给update
方法,然后调用digest()
。
input
- 在摘要完成之前要更新的输入。
public static boolean isEqual(byte[] digesta, byte[] digestb)
digesta
- 一个比较的摘要。
digestb
- 其他摘要比较。
public void reset()
public final String getAlgorithm()
public final int getDigestLength()
public Object clone() throws CloneNotSupportedException
clone
在
MessageDigestSpi
CloneNotSupportedException
- 如果这是在不支持
Cloneable
。
Cloneable