- 所有已实现的接口:
-
Cloneable
MAC提供了一种检查通过不可靠介质传输或存储的信息完整性的方式,基于一个秘密密钥。通常,消息认证码在两个共享秘密密钥的参与方之间使用,以验证这些参与方之间传输的信息。
基于加密哈希函数的MAC机制称为HMAC。HMAC可以与任何加密哈希函数一起使用,例如SHA256或SHA384,结合一个共享的秘密密钥。HMAC在RFC 2104中指定。
Java平台的每个实现都必须支持以下标准Mac算法:
HmacSHA1HmacSHA256
- 自版本:
- 1.4
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionfinal Objectclone()如果提供程序实现是可克隆的,则返回一个克隆对象。final byte[]doFinal()完成MAC操作。final byte[]doFinal(byte[] input) 处理给定的字节数组并完成MAC操作。final voiddoFinal(byte[] output, int outOffset) 完成MAC操作。final String返回此Mac对象的算法名称。static final MacgetInstance(String algorithm) 返回实现指定MAC算法的Mac对象。static final MacgetInstance(String algorithm, String provider) 返回实现指定MAC算法的Mac对象。static final MacgetInstance(String algorithm, Provider provider) 返回实现指定MAC算法的Mac对象。final int返回MAC的字节长度。final Provider返回此Mac对象的提供程序。final void使用给定的密钥初始化此Mac对象。final voidinit(Key key, AlgorithmParameterSpec params) 使用给定的密钥和算法参数初始化此Mac对象。final voidreset()重置此Mac对象。final voidupdate(byte input) 处理给定的字节。final voidupdate(byte[] input) 处理给定的字节数组。final voidupdate(byte[] input, int offset, int len) 处理input中从offset开始的前len字节。final voidupdate(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.preferredSecurity属性来确定指定算法的首选提供程序顺序。这可能与由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的委托上调用此方法。 - 参见:
-