当前位置 类层次 (JDK) 所有类 (JDK) 所有域和方法 (JDK)

类 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

当前位置 类层次 (JDK) 所有类 (JDK) 所有域和方法 (JDK)