类 java.security.MessageDigest
java.lang.Object
|
+----java.security.MessageDigest
- public abstract class MessageDigest
- extends Object
MessageDigest 提供了消息摘要算法,如 MD5 或 SHA,的功能。消息摘要是安全单向散列函数,它采用任意大小的数据并输出一个固定长度的散列值。
象 Java 安全性中的其它基于算法的类一样,MessageDigest 有两个主要的组件:
- 消息摘要 API ( 应用程序接口 )
- 这是需要消息摘要服务的应用调用的方法的接口。这个 API 由所有公有方法组成。
- 消息摘要 SPI ( 服务提供者接口 )
- 该接口是由提供特殊算法的提供者实现的接口。它由所有名字前缀为
engine 的方法组成。每个这样的方法由具有相应名字的公有 API 方法调用。例如,
engineReset 方法由
reset 方法调用。SPI 方法是抽象的;提供者必须提供一个具体的实现。
MessageDigest 对象在启动时被初始化。使用
update 方法处理数据。在任何地方都可调用 reset 复位摘要。一旦所有需要修改的数据都被修改了,将调用一个
digest 方法完成散列码的计算。
对于给定次数的修改,只能调用 digest 方法一次。在调用 digest 之后,MessageDigest 对象被复位为初始化的状态。
可以自由的实现 Cloneable 接口,这样做将会使客户应用在复制前用 instanceof Cloneable 测试可复制性:
MessageDigest md = MessageDigest.getInstance("SHA");
if (md instanceof Cloneable) {
md.update(toChapter1);
MessageDigest tc1 = md.clone();
byte[] toChapter1Digest = tc1.digest;
md.update(toChapter2);
...etc.
} else {
throw new DigestException("couldn't make digest of partial content");
}
注意如果给定的实现是不可复制的,如果事先知道摘要的数目,仍然能以几个实例为例计算中间的摘要。
- 参见:
- DigestInputStream, DigestOutputStream
构造子索引
- MessageDigest(String)
- 用指定的算法名创建一个消息摘要。
方法索引
- clone()
-
如果实现是可复制的,返回一个复制。
- digest()
- 通过执行最后的诸如填充的操作完成散列码的计算。
- digest(byte[])
- 使用指定的字节数组执行对摘要最后的修改,然后完成摘要计算。
- engineDigest()
- SPI:通过执行诸如填充的最后的操作完成散列码的计算。
- engineReset()
- SPI:为将来的使用复位该摘要。
- engineUpdate(byte)
- SPI:用指定的字节修改该摘要。
- engineUpdate(byte[], int, int)
- SPI:用指定的字节数组修改该摘要,从指定数组的偏移量开始。
- getAlgorithm()
-
返回标识该算法的字符串,该字符串独立于实现细节。
- getInstance(String)
- 生成一个 MessageDigest 对象,它实现指定的摘要算法。
- getInstance(String, String)
- 生成一个 MessageDigest 对象,实现指定的算法,如果提供者的算法是可用的,那么该算法由该提供者提供。
- isEqual(byte[], byte[])
- 比较两个摘要是否相同。
- reset()
- 为将来的使用复位该摘要。
- toString()
- 返回该消息摘要对象的字符串表示。
- update(byte)
- 用指定的字节修改该摘要。
- update(byte[])
- 用指定的字节数组修改该摘要。
- update(byte[], int, int)
- 用指定的字节数组修改摘要,从数组指定的偏移量开始。
构造子
MessageDigest
protected MessageDigest(String algorithm)
- 用指定的算法名创建一个消息摘要。
- 参数:
- algorithm - 摘要算法的标准字符串名。
方法
getInstance
public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
- 生成一个 MessageDigest 对象,它实现指定的摘要算法。 如果缺省的提供者包包含一个实现了该算法 MessageDigest 子类,则返回该子类的一个实例。如果算法在缺省包中是不可用的,将搜索其它的包。
- 参数:
- algorithm - 申请的算法名。
- 返回值:
- 一个实现指定算法的 Message Digest 对象。
- 抛出:
NoSuchAlgorithmException
- 如果算法在调用者环境中是不可用的。
getInstance
public static MessageDigest getInstance(String algorithm,
String provider) throws
NoSuchAlgorithmException,
NoSuchProviderException
- 生成一个 MessageDigest 对象,实现指定的算法,如果提供者的算法是可用的,那么该算法由该提供者提供。
- 参数:
- algorithm - 申请的算法名。
- provider - 提供者的名字。
- 返回值:
- 一个实现指定算法的 Message Digest 对象。
- 抛出:
NoSuchAlgorithmException
- 如果算法在申请的调用者提供的包中是不可用的。
- 抛出:
NoSuchProviderException
- 如果提供者在环境中是不可用的。
- 参见:
- Provider
update
public void update(byte input)
- 用指定的字节修改该摘要。
- 参数:
- input - 用于修改摘要的字节。
update
public void update(byte input[],
int offset,
int len)
- 从数组指定的偏移量开始,用指定的字节数组修改摘要。
- 参数:
- input - 该字节数组。
- offset - 字节数组中开始的偏移量。
- len - 从
offset 开始用的字节数。
update
public void update(byte input[])
- 用指定的字节数组修改该摘要。
- 参数:
- input - 该字节数组。
digest
public byte[] digest()
- 通过执行最后的诸如填充的操作完成散列码的计算。 在调用之后复位该摘要。
- 返回值:
- 存放结果散列值的字节数组。
digest
public byte[] digest(byte input[])
- 使用指定的字节数组执行对摘要最后的修改,然后完成摘要计算。 即,这个方法首先对数组调用 update,然后调用 digest()。
- 参数:
- input - 在摘要计算完成之前用于修改的输入值。
- 返回值:
- 结果散列值的字节数组。
toString
public String toString()
- 返回该消息摘要对象的字符串表示。
- 覆盖:
- 类 Object 中的 toString
isEqual
public static boolean isEqual(byte digesta[],
byte digestb[])
- 比较两个摘要是否相同。 进行简单的比较。
- 参数:
- digesta - 要比较的一个摘要。
- digestb - 要比较的另一个摘要。
- 返回值:
- 如果两个摘要相等则为 true ,否则为 false。
reset
public void reset()
- 为将来的使用复位该摘要。
getAlgorithm
public final String getAlgorithm()
- 返回标识该算法的字符串,该字符串独立于实现的细节。 名字必须是一个标准的 Java 安全性名字 ( 如 "SHA"、"MD5"等 )。
engineUpdate
protected abstract void engineUpdate(byte input)
- SPI:用指定的字节修改该摘要。
- 参数:
- input - 用于修改的字节。
engineUpdate
protected abstract void engineUpdate(byte input[],
int offset,
int len)
- SPI:用指定的字节数组修改摘要,从指定数组的偏移量开始。
如果摘要已经完成,这将是一个空操作指令。
- 参数:
- input - 用于修改的字节数组。
- offset - 字节数组中开始的偏移量。
- len - 从
offset 开始用的字节数。
engineDigest
protected abstract byte[] engineDigest()
- SPI:通过执行诸如填充的最后的操作完成散列码的计算。 一旦调用
engineDigest ,引擎将被复位 ( 参见
reset)。复位是引擎实现者的责任。
- 返回值:
- 结果散列值的字节数组。
engineReset
protected abstract void engineReset()
- SPI:为将来的使用复位该摘要。
clone
public Object clone() throws CloneNotSupportedException
- 如果实现是可复制的,返回一个复制。
- 返回值:
- 如果实现是可复制的,返回一个复制。
- 抛出:
CloneNotSupportedException
- 如果该方法被不支持
Cloneable 的实现调用。
- 覆盖:
- 类 Object 中的 clone