javax.crypto

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

public class Mac
     
extends Object
implements Cloneable

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

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

基于加密哈希函数的 MAC 机制也叫作 HMAC。结合秘密共享密钥,HMAC 可以用于任何加密哈希函数(如 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)
          处理给定的 byte 数组并完成 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)
          处理给定的 byte 数组。
 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 对象。

此方法从首选 Provider 开始遍历已注册安全提供者列表。返回一个封装 MacSpi 实现的新 Mac 对象,该实现取自支持指定算法的第一个 Provider。

注意,可以通过 Security.getProviders() 方法获取已注册提供者列表。

参数:
algorithm - 所请求 MAC 算法的标准名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture Reference Guide 中的附录 A。
返回:
新的 Mac 对象。
抛出:
NoSuchAlgorithmException - 如果没有 Provider 支持指定算法的 MacSpi 实现。
另请参见:
Provider

getInstance

public static final Mac getInstance(String algorithm,
                                    String provider)
                             throws NoSuchAlgorithmException,
                                    NoSuchProviderException
返回实现指定 MAC 算法的 Mac 对象。

返回一个封装 MacSpi 实现的新 Mac 对象,该实现自指定的提供者。指定提供者必须在安全提供者列表中注册。

注意,可以通过 Security.getProviders() 方法获取已注册提供者列表。

参数:
algorithm - 所请求 MAC 算法的标准名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture Reference Guide 中的附录 A。
provider - 提供者的名称。
返回:
新的 Mac 对象。
抛出:
NoSuchAlgorithmException - 如果不能从指定提供者获得指定算法的 MacSpi 实现。
NoSuchProviderException - 如果指定提供者未在安全提供者列表中注册。
IllegalArgumentException - 如果 provider 为 null 或空。
另请参见:
Provider

getInstance

public static final Mac getInstance(String algorithm,
                                    Provider provider)
                             throws NoSuchAlgorithmException
返回实现指定 MAC 算法的 Mac 对象。

返回一个封装 MacSpi 实现的新 Mac 对象,该实现取自指定的 Provider 对象。注意,指定的 Provider 对象无需在提供者列表中注册。

参数:
algorithm - 所请求 MAC 算法的标准名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture Reference Guide 中的附录 A。
provider - 提供者。
返回:
新的 Mac 对象。
抛出:
NoSuchAlgorithmException - 如果不能从指定 Provider 对象获得指定算法的 MacSpi 实现。
IllegalArgumentException - 如果 provider 为 null。
另请参见:
Provider

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
处理给定的 byte 数组。

参数:
input - 要处理的 byte 数组。
抛出:
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
处理给定的 byte 数组并完成 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