java.lang.Object javax.crypto.Mac
此类提供“消息验证码”(Message Authentication Code,MAC)算法的功能。
MAC 基于秘密密钥提供一种方式来检查在不可靠介质上进行传输或存储的信息的完整性。通常,消息验证码在共享秘密密钥的两个参与者之间使用,以验证这两者之间传输的信息。
基于加密哈希函数的 MAC 机制也叫作 HMAC。结合秘密共享密钥,HMAC 可以用于任何加密哈希函数(如 MD5 或 SHA-1)。HMAC 在 RFC 2104 中指定。
构造方法摘要 | |
---|---|
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 |
构造方法详细信息 |
---|
protected Mac(MacSpi macSpi, Provider provider, String algorithm)
macSpi
- 代理
provider
- 提供者
algorithm
- 算法
方法详细信息 |
---|
public final String getAlgorithm()
Mac
对象的算法名称。
此名称与创建此 Mac
对象的 getInstance
调用之一中指定的名称相同。
Mac
对象的算法名称。
public static final Mac getInstance(String algorithm) throws NoSuchAlgorithmException
Mac
对象。
此方法从首选 Provider 开始遍历已注册安全提供者列表。返回一个封装 MacSpi 实现的新 Mac 对象,该实现取自支持指定算法的第一个 Provider。
注意,可以通过 Security.getProviders()
方法获取已注册提供者列表。
algorithm
- 所请求 MAC 算法的标准名称。有关标准算法名称的信息,请参阅
Java Cryptography Architecture Reference Guide 中的附录 A。
Mac
对象。
NoSuchAlgorithmException
- 如果没有 Provider 支持指定算法的 MacSpi 实现。
Provider
public static final Mac getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
Mac
对象。
返回一个封装 MacSpi 实现的新 Mac 对象,该实现自指定的提供者。指定提供者必须在安全提供者列表中注册。
注意,可以通过 Security.getProviders()
方法获取已注册提供者列表。
algorithm
- 所请求 MAC 算法的标准名称。有关标准算法名称的信息,请参阅
Java Cryptography Architecture Reference Guide 中的附录 A。
provider
- 提供者的名称。
Mac
对象。
NoSuchAlgorithmException
- 如果不能从指定提供者获得指定算法的 MacSpi 实现。
NoSuchProviderException
- 如果指定提供者未在安全提供者列表中注册。
IllegalArgumentException
- 如果
provider
为 null 或空。
Provider
public static final Mac getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
Mac
对象。
返回一个封装 MacSpi 实现的新 Mac 对象,该实现取自指定的 Provider 对象。注意,指定的 Provider 对象无需在提供者列表中注册。
algorithm
- 所请求 MAC 算法的标准名称。有关标准算法名称的信息,请参阅
Java Cryptography Architecture Reference Guide 中的附录 A。
provider
- 提供者。
Mac
对象。
NoSuchAlgorithmException
- 如果不能从指定 Provider 对象获得指定算法的 MacSpi 实现。
IllegalArgumentException
- 如果
provider
为 null。
Provider
public final Provider getProvider()
Mac
对象的提供者。
Mac
对象的提供者。
public final int getMacLength()
public final void init(Key key) throws InvalidKeyException
Mac
对象。
key
- 密钥。
InvalidKeyException
- 如果给定密钥不适合初始化此 MAC。
public final void init(Key key, AlgorithmParameterSpec params) throws InvalidKeyException, InvalidAlgorithmParameterException
Mac
对象。
key
- 密钥。
params
- 算法参数。
InvalidKeyException
- 如果给定密钥不适合初始化此 MAC。
InvalidAlgorithmParameterException
- 如果给定算法参数不适合此 MAC。
public final void update(byte input) throws IllegalStateException
input
- 要处理的输入字节。
IllegalStateException
- 如果尚未初始化此
Mac
。
public final void update(byte[] input) throws IllegalStateException
input
- 要处理的 byte 数组。
IllegalStateException
- 如果尚未初始化此
Mac
。
public final void update(byte[] input, int offset, int len) throws IllegalStateException
offset
(包含)开始,处理
input
中的前
len
个字节。
input
- 输入缓冲区。
offset
-
input
中输入起始处的偏移量。
len
- 要处理的字节数。
IllegalStateException
- 如果尚未初始化此
Mac
。
public final void update(ByteBuffer input)
input.position()
开始,处理 ByteBuffer
input
中的
input.remaining()
个字节。返回时,缓冲区的位置将等于其限制;其限制不变。
input
- ByteBuffer
IllegalStateException
- 如果尚未初始化此
Mac
。
public final byte[] doFinal() throws IllegalStateException
对此方法的调用将此 Mac
对象重置为上一次调用 init(Key)
或 init(Key, AlgorithmParameterSpec)
初始化的状态。也就是说,该对象被重置,并可通过重新调用 update
和 doFinal
(如果需要)从同一个密钥生成另一个 MAC。(若要用不同的密钥重用此 Mac
对象,则必须通过调用 init(Key)
或 init(Key, AlgorithmParameterSpec)
对其重新初始化)。
IllegalStateException
- 如果尚未初始化此
Mac
。
public final void doFinal(byte[] output, int outOffset) throws ShortBufferException, IllegalStateException
对此方法的调用将此 Mac
对象重置为上一次调用 init(Key)
或 init(Key, AlgorithmParameterSpec)
初始化的状态。也就是说,该对象被重置,并可通过重新调用 update
和 doFinal
(如果需要)从同一个密钥生成另一个 MAC。(若要用不同的密钥重用此 Mac
对象,则必须通过调用 init(Key)
或 init(Key, AlgorithmParameterSpec)
对其重新初始化)。
MAC 结果将存储在 output
中,从 outputOffset
(包含)开始。
output
- 存储 MAC 结果的缓冲区
outOffset
-
output
中存储 MAC 处的偏移量
ShortBufferException
- 如果给定输出缓冲区太小不能存储该结果
IllegalStateException
- 如果尚未初始化此
Mac
。
public final byte[] doFinal(byte[] input) throws IllegalStateException
对此方法的调用将此 Mac
对象重置为上一次调用 init(Key)
或 init(Key, AlgorithmParameterSpec)
初始化的状态。也就是说,该对象被重置,并可通过重新调用 update
和 doFinal
(如果需要)从同一个密钥生成另一个 MAC。(若要用不同的密钥重用此 Mac
对象,则必须通过调用 init(Key)
或 init(Key, AlgorithmParameterSpec)
对其重新初始化)。
input
- 字节中的数据
IllegalStateException
- 如果尚未初始化此
Mac
。
public final void reset()
Mac
对象。
对此方法的调用将此 Mac
对象重置为上一次调用 init(Key)
或 init(Key, AlgorithmParameterSpec)
初始化的状态。也就是说,该对象被重置,并可通过重新调用 update
和 doFinal
(如果需要)从同一个密钥生成另一个 MAC。(若要用不同的密钥重用此 Mac
对象,则必须通过调用 init(Key)
或 init(Key, AlgorithmParameterSpec)
对其重新初始化)。
public final Object clone() throws CloneNotSupportedException
CloneNotSupportedException
- 如果对不支持
Cloneable
的代理调用此方法。
Cloneable