JavaTM 2 Platform
Standard Ed. 5.0

javax.crypto
类 Mac

java.lang.Object
  继承者 javax.crypto.Mac
所有已实现的接口:
Cloneable

public class Mac
extends Object
implements Cloneable

此类提供“消息验证代码”(MAC) 算法的功能。

MAC 基于秘密密钥提供一种检查信息完整性的方法,该信息在不可靠的介质上传输或者存储在这种介质上。通常,消息验证代码在共享秘密密钥的两个参与者之间使用,以验证这两方之间传输的信息。

基于 cryptographic(加密)哈希函数的 MAC 机制也叫作 HMAC。HMAC 结合秘密共享密钥可以与任何 cryptographic 哈希函数(如 MD5 或 SHA-1)一起使用。HMAC 在 RFC 2104 中指定。

从以下版本开始:
1.4

构造方法摘要
protected Mac(MacSpi macSpi, Provider provider, String algorithm)
          创建一个 MAC 对象。
 
方法摘要
 Object clone()
          如果此提供程序实现可以复制,则返回一个副本。
 byte[] doFinal()
          完成 MAC 操作。
 byte[] doFinal(byte[] input)
          处理给定的字节数组并完成 MAC 操作。
 void doFinal(byte[] output, int outOffset)
          完成 MAC 操作。
 String getAlgorithm()
          返回此 Mac 对象的算法名称。
static Mac getInstance(String algorithm)
          生成实现指定 MAC 算法的 Mac 对象。
static Mac getInstance(String algorithm, Provider provider)
          根据指定的提供程序生成指定 MAC 算法的 Mac 对象。
static Mac getInstance(String algorithm, String provider)
          根据指定的提供程序生成指定 MAC 算法的 Mac 对象。
 int getMacLength()
          返回以字节为单位的 MAC 的长度。
 Provider getProvider()
          返回此 Mac 对象的提供程序。
 void init(Key key)
          用给定的密钥初始化此 Mac 对象。
 void init(Key key, AlgorithmParameterSpec params)
          用给定的密钥和算法参数初始化此 Mac 对象。
 void reset()
          重新设置此 Mac 对象。
 void update(byte input)
          处理给定的字节。
 void update(byte[] input)
          处理给定的字节数组。
 void update(byte[] input, int offset, int len)
          从 offset 开始处(包含),处理 input 中的第一个 len 字节。
 void update(ByteBuffer input)
          从 input.position() 开始处,处理 ByteBuffer input 中的 input.remaining() 字节。
 
从类 java.lang.Object 继承的方法
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

Mac

protected Mac(MacSpi macSpi,
              Provider provider,
              String algorithm)
创建一个 MAC 对象。

参数:
macSpi - 代理
provider - 提供程序
algorithm - 算法
方法详细信息

getAlgorithm

public final String getAlgorithm()
返回此 Mac 对象的算法名称。

此名称与在某个创建此 Mac 对象的 getInstance 调用中指定的名称相同。

返回:
Mac 对象的算法名称。

getInstance

public static final Mac getInstance(String algorithm)
                             throws NoSuchAlgorithmException
生成实现指定 MAC 算法的 Mac 对象。如果默认提供程序包提供请求的 MAC 算法的实现,则返回包含该实现的一个 Mac 实例。如果默认的提供程序包中没有可用的算法,则将搜索其他的提供程序包。

参数:
algorithm - 请求的 MAC 算法的标准名称。有关标准算法名称的信息,请参阅《Java Cryptography Extension Reference Guide》中的附录 A。
返回:
新的 Mac 对象
抛出:
NoSuchAlgorithmException - 如果默认的提供程序包中指定的算法不可用,或者搜索到的其他提供程序包都不可用。

getInstance

public static final Mac getInstance(String algorithm,
                                    String provider)
                             throws NoSuchAlgorithmException,
                                    NoSuchProviderException
根据指定的提供程序生成指定 MAC 算法的 Mac 对象。

参数:
algorithm - 请求的 MAC 算法的标准名称。有关标准算法名称的信息,请参阅《Java Cryptography Extension Reference Guide》中的附录 A。
provider - 提供程序的名称。
返回:
新的 Mac 对象。
抛出:
NoSuchAlgorithmException - 如果指定的提供程序中未提供指定的算法。
NoSuchProviderException - 如果指定的提供程序未配置。
IllegalArgumentException - 如果 provider 为 null。

getInstance

public static final Mac getInstance(String algorithm,
                                    Provider provider)
                             throws NoSuchAlgorithmException
根据指定的提供程序生成指定 MAC 算法的 Mac 对象。注:provider 不一定都需要注册。

参数:
algorithm - 请求的 MAC 算法的标准名称。有关标准算法名称的信息,请参阅《Java Cryptography Extension Reference Guide》中的附录 A。
provider - 提供程序的名称。
返回:
新的 Mac 对象。
抛出:
NoSuchAlgorithmException - 如果指定的提供程序中未提供指定的算法。
IllegalArgumentException - 如果 provider 为 null。

getProvider

public final Provider getProvider()
返回此 Mac 对象的提供程序。

返回:
Mac 对象的提供程序。

getMacLength

public final int getMacLength()
返回以字节为单位的 MAC 的长度。

返回:
以字节为单位的 MAC 长度。

init

public final void init(Key key)
                throws InvalidKeyException
用给定的密钥初始化此 Mac 对象。

参数:
key - 密钥。
抛出:
InvalidKeyException - 如果给定密钥不适合初始化此 MAC。

init

public final void init(Key key,
                       AlgorithmParameterSpec params)
                throws InvalidKeyException,
                       InvalidAlgorithmParameterException
用给定的密钥和算法参数初始化此 Mac 对象。

参数:
key - 密钥。
params - 算法参数。
抛出:
InvalidKeyException - 如果给定密钥不适合初始化此 MAC。
InvalidAlgorithmParameterException - 如果给定算法参数不适合此 MAC。

update

public final void update(byte input)
                  throws IllegalStateException
处理给定的字节。

参数:
input - 要处理的输入字节。
抛出:
IllegalStateException - 如果尚未初始化此 Mac

update

public final void update(byte[] input)
                  throws IllegalStateException
处理给定的字节数组。

参数:
input - 要处理的字节数组。
抛出:
IllegalStateException - 如果尚未初始化此 Mac

update

public final void update(byte[] input,
                         int offset,
                         int len)
                  throws IllegalStateException
offset 开始处(包含),处理 input 中的第一个 len 字节。

参数:
input - 输入缓冲区。
offset - input 中输入开始处的偏移量。
len - 要处理的字节数。
抛出:
IllegalStateException - 如果尚未初始化此 Mac

update

public final void update(ByteBuffer input)
input.position() 开始处,处理 ByteBuffer input 中的 input.remaining() 字节。返回时,缓冲区的位置将等于其限制;其限制并未改变。

参数:
input - ByteBuffer
抛出:
IllegalStateException - 如果尚未初始化此 Mac
从以下版本开始:
1.5

doFinal

public final byte[] doFinal()
                     throws IllegalStateException
完成 MAC 操作。

对此方法的调用将把此 Mac 对象重新设置为以前通过调用 init(Key)init(Key, AlgorithmParameterSpec) 对其初始化时的状态。也就是说,如果需要,通过重新调用 updatedoFinal,可重新设置对象,并通过它可用同一个密钥生成其他人的 MAC。(为了用不同的密钥重新使用此 Mac 对象,必须通过调用 init(Key)init(Key, AlgorithmParameterSpec) 对其重新初始化)。

返回:
MAC 的结果。
抛出:
IllegalStateException - 如果尚未初始化此 Mac

doFinal

public final void doFinal(byte[] output,
                          int outOffset)
                   throws ShortBufferException,
                          IllegalStateException
完成 MAC 操作。

对此方法的调用将把此 Mac 对象重新设置为以前通过调用 init(Key)init(Key, AlgorithmParameterSpec) 对其初始化时的状态。也就是说,如果需要,通过重新调用 updatedoFinal,可重新设置对象,并通过它可用同一个密钥生成其他人的 MAC。(为了用不同的密钥重新使用此 Mac 对象,必须通过调用 init(Key)init(Key, AlgorithmParameterSpec) 对其重新初始化)。

MAC 结果存储在 output 中从 outputOffset 开始的位置(包含)。

参数:
output - 存储 MAC 结果的缓冲区
outOffset - output 中存储 MAC 处的偏移量
抛出:
ShortBufferException - 如果给定输出缓冲区太小不能存储该结果
IllegalStateException - 如果尚未初始化此 Mac

doFinal

public final byte[] doFinal(byte[] input)
                     throws IllegalStateException
处理给定的字节数组并完成 MAC 操作。

对此方法的调用将把此 Mac 对象重新设置为以前通过调用 init(Key)init(Key, AlgorithmParameterSpec) 对其初始化时的状态。也就是说,如果需要,通过重新调用 updatedoFinal,可重新设置对象,并通过它可用同一个密钥生成其他人的 MAC。(为了用不同的密钥重新使用此 Mac 对象,必须通过调用 init(Key)init(Key, AlgorithmParameterSpec) 对其重新初始化)。

参数:
input - 字节中的数据
返回:
MAC 的结果。
抛出:
IllegalStateException - 如果尚未初始化此 Mac

reset

public final void reset()
重新设置此 Mac 对象。

对此方法的调用将把此 Mac 对象重新设置为以前通过调用 init(Key)init(Key, AlgorithmParameterSpec) 对其初始化时的状态。也就是说,如果需要,通过重新调用 updatedoFinal,可重新设置对象,并通过它可用同一个密钥生成其他人的 MAC。(为了用不同的密钥重新使用此 Mac 对象,必须通过调用 init(Key)init(Key, AlgorithmParameterSpec) 对其重新初始化。


clone

public final Object clone()
                   throws CloneNotSupportedException
如果此提供程序实现可以复制,则返回一个副本。

覆盖:
Object 中的 clone
返回:
如果该提供程序实现可以复制,则返回一个副本。
抛出:
CloneNotSupportedException - 如果这是对不支持 Cloneable 的代理调用。
另请参见:
Cloneable

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策