- 所有已实现的接口:
-
Cloneable
MAC提供了一种检查通过不可靠介质传输或存储的信息完整性的方式,基于一个秘密密钥。通常,消息认证码在两个共享秘密密钥的参与方之间使用,以验证这些参与方之间传输的信息。
基于加密哈希函数的MAC机制称为HMAC。HMAC可以与任何加密哈希函数一起使用,例如SHA256或SHA384,结合一个共享的秘密密钥。HMAC在RFC 2104中指定。
Java平台的每个实现都必须支持以下标准Mac
算法:
HmacSHA1
HmacSHA256
- 自版本:
- 1.4
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionfinal Object
clone()
如果提供程序实现是可克隆的,则返回一个克隆对象。final byte[]
doFinal()
完成MAC操作。final byte[]
doFinal
(byte[] input) 处理给定的字节数组并完成MAC操作。final void
doFinal
(byte[] output, int outOffset) 完成MAC操作。final String
返回此Mac
对象的算法名称。static final Mac
getInstance
(String algorithm) 返回实现指定MAC算法的Mac
对象。static final Mac
getInstance
(String algorithm, String provider) 返回实现指定MAC算法的Mac
对象。static final Mac
getInstance
(String algorithm, Provider provider) 返回实现指定MAC算法的Mac
对象。final int
返回MAC的字节长度。final Provider
返回此Mac
对象的提供程序。final void
使用给定的密钥初始化此Mac
对象。final void
init
(Key key, AlgorithmParameterSpec params) 使用给定的密钥和算法参数初始化此Mac
对象。final void
reset()
重置此Mac
对象。final void
update
(byte input) 处理给定的字节。final void
update
(byte[] input) 处理给定的字节数组。final void
update
(byte[] input, int offset, int len) 处理input
中从offset
开始的前len
字节。final void
update
(ByteBuffer input) 处理ByteBufferinput
中从input.position()
开始的input.remaining()
字节。
-
Constructor Details
-
Mac
创建一个MAC对象。- 参数:
-
macSpi
- 代理 -
provider
- 提供程序 -
algorithm
- 算法
-
-
Method Details
-
getAlgorithm
返回此Mac
对象的算法名称。这是在创建此
Mac
对象的getInstance
调用中指定的相同名称。- 返回:
-
此
Mac
对象的算法名称。
-
getInstance
返回实现指定MAC算法的Mac
对象。此方法遍历已注册的安全提供程序列表,从最首选的提供程序开始。返回一个新的
Mac
对象,封装了第一个支持指定算法的MacSpi
实现的提供程序。请注意,已注册提供程序的列表可以通过
Security.getProviders()
方法检索。- 实现注意:
-
JDK参考实现另外使用
jdk.security.provider.preferred
Security
属性来确定指定算法的首选提供程序顺序。这可能与由Security.getProviders()
返回的提供程序顺序不同。 - 参数:
-
algorithm
- 请求的MAC算法的标准名称。有关标准算法名称的信息,请参阅 Java安全标准算法名称规范中的Mac部分。 - 返回:
-
新的
Mac
对象 - 抛出:
-
NoSuchAlgorithmException
- 如果没有Provider
支持指定算法的MacSpi
实现 -
NullPointerException
- 如果algorithm
为null
- 参见:
-
getInstance
public static final Mac getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException 返回实现指定MAC算法的Mac
对象。返回一个新的
Mac
对象,封装了指定提供程序的MacSpi
实现。指定的提供程序必须在安全提供程序列表中注册。请注意,已注册提供程序的列表可以通过
Security.getProviders()
方法检索。- 参数:
-
algorithm
- 请求的MAC算法的标准名称。有关标准算法名称的信息,请参阅 Java安全标准算法名称规范中的Mac部分。 -
provider
- 提供程序的名称。 - 返回:
-
新的
Mac
对象 - 抛出:
-
IllegalArgumentException
- 如果provider
为null
或空 -
NoSuchAlgorithmException
- 如果指定提供程序中不可用指定算法的MacSpi
实现 -
NoSuchProviderException
- 如果指定提供程序未在安全提供程序列表中注册 -
NullPointerException
- 如果algorithm
为null
- 参见:
-
getInstance
public static final Mac getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException 返回实现指定MAC算法的Mac
对象。返回一个新的
Mac
对象,封装了指定提供程序的MacSpi
实现。请注意,指定的提供程序不必在提供程序列表中注册。- 参数:
-
algorithm
- 请求的MAC算法的标准名称。有关标准算法名称的信息,请参阅 Java安全标准算法名称规范中的Mac部分。 -
provider
- 提供程序。 - 返回:
-
新的
Mac
对象 - 抛出:
-
IllegalArgumentException
- 如果provider
为null
-
NoSuchAlgorithmException
- 如果指定Provider
对象中不可用指定算法的MacSpi
实现 -
NullPointerException
- 如果algorithm
为null
- 参见:
-
getProvider
返回此Mac
对象的提供程序。- 返回:
-
此
Mac
对象的提供程序。
-
getMacLength
public final int getMacLength()返回MAC的字节长度。- 返回:
- MAC的字节长度。
-
init
使用给定的密钥初始化此Mac
对象。- 参数:
-
key
- 密钥。 - 抛出:
-
InvalidKeyException
- 如果给定的密钥不适合初始化此MAC。
-
init
public final void init(Key key, AlgorithmParameterSpec params) throws InvalidKeyException, InvalidAlgorithmParameterException 使用给定的密钥和算法参数初始化此Mac
对象。- 参数:
-
key
- 密钥。 -
params
- 算法参数。 - 抛出:
-
InvalidKeyException
- 如果给定的密钥不适合初始化此MAC。 -
InvalidAlgorithmParameterException
- 如果给定的算法参数不适合此MAC。
-
update
处理给定的字节。- 参数:
-
input
- 要处理的输入字节。 - 抛出:
-
IllegalStateException
- 如果此Mac
尚未初始化。
-
update
处理给定的字节数组。- 参数:
-
input
- 要处理的字节数组。 - 抛出:
-
IllegalStateException
- 如果此Mac
尚未初始化。
-
update
处理input
中从offset
开始的前len
字节。- 参数:
-
input
- 输入缓冲区。 -
offset
- 输入开始的偏移量。 -
len
- 要处理的字节数。 - 抛出:
-
IllegalStateException
- 如果此Mac
尚未初始化。
-
update
在ByteBufferinput
中处理input.remaining()
字节,从input.position()
开始。返回时,缓冲区的位置将等于其限制;其限制不会改变。- 参数:
-
input
- ByteBuffer - 抛出:
-
IllegalStateException
- 如果此Mac
尚未初始化。 -
IllegalArgumentException
- 如果input
为null - 自从:
- 1.5
-
doFinal
完成MAC操作。调用此方法将重置此
Mac
对象为先前通过调用init(Key)
或init(Key, AlgorithmParameterSpec)
进行初始化时的状态。也就是说,对象被重置并可通过对update
和doFinal
的新调用来生成另一个具有相同密钥的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)
进行初始化时的状态。也就是说,对象被重置并可通过对update
和doFinal
的新调用来生成另一个具有相同密钥的MAC,如果需要的话。(为了重用此Mac
对象并使用不同的密钥,必须通过调用init(Key)
或init(Key, AlgorithmParameterSpec)
重新初始化该对象)。MAC结果存储在
output
中,从outOffset
开始。- 参数:
-
output
- 存储MAC结果的缓冲区 -
outOffset
- 存储MAC的output
中的偏移量 - 抛出:
-
ShortBufferException
- 如果给定的输出缓冲区太小而无法容纳结果 -
IllegalStateException
- 如果此Mac
尚未初始化。
-
doFinal
处理给定的字节数组并完成MAC操作。调用此方法将重置此
Mac
对象为先前通过调用init(Key)
或init(Key, AlgorithmParameterSpec)
进行初始化时的状态。也就是说,对象被重置并可通过对update
和doFinal
的新调用来生成另一个具有相同密钥的MAC,如果需要的话。(为了重用此Mac
对象并使用不同的密钥,必须通过调用init(Key)
或init(Key, AlgorithmParameterSpec)
重新初始化该对象)。- 参数:
-
input
- 字节数据 - 返回:
- MAC结果。
- 抛出:
-
IllegalStateException
- 如果此Mac
尚未初始化。
-
reset
public final void reset()重置此Mac
对象。调用此方法将重置此
Mac
对象为先前通过调用init(Key)
或init(Key, AlgorithmParameterSpec)
进行初始化时的状态。也就是说,对象被重置并可通过对update
和doFinal
的新调用来生成另一个具有相同密钥的MAC,如果需要的话。(为了重用此Mac
对象并使用不同的密钥,必须通过调用init(Key)
或init(Key, AlgorithmParameterSpec)
重新初始化该对象)。 -
clone
如果提供程序实现支持克隆,则返回克隆。- 覆盖:
-
clone
在类Object
- 返回:
- 如果提供程序实现支持克隆,则返回克隆。
- 抛出:
-
CloneNotSupportedException
- 如果在不支持Cloneable
的委托上调用此方法。 - 参见:
-