- java.lang.Object
-
- javax.crypto.Mac
-
- 实现的所有接口
-
Cloneable
public class Mac extends Object implements Cloneable
此类提供“消息验证代码”(MAC)算法的功能。MAC提供了一种基于秘密密钥检查在不可靠介质上传输或存储在不可靠介质中的信息的完整性的方法。 通常,在共享密钥的两方之间使用消息认证码,以便验证在这些方之间传输的信息。
基于加密散列函数的MAC机制被称为HMAC。 HMAC可以与任何加密散列函数(例如,SHA256或SHA384)一起使用,并结合秘密共享密钥。 HMAC在RFC 2104中指定。
需要Java平台的每个实现来支持以下标准
Mac算法:-
HmacMD5 -
HmacSHA1 -
HmacSHA256
- 从以下版本开始:
- 1.4
-
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 Objectclone()如果提供程序实现是可克隆的,则返回克隆。byte[]doFinal()完成MAC操作。byte[]doFinal(byte[] input)处理给定的字节数组并完成MAC操作。voiddoFinal(byte[] output, int outOffset)完成MAC操作。StringgetAlgorithm()返回此Mac对象的算法名称。static MacgetInstance(String algorithm)返回实现指定MAC算法的Mac对象。static MacgetInstance(String algorithm, String provider)返回实现指定MAC算法的Mac对象。static MacgetInstance(String algorithm, Provider provider)返回实现指定MAC算法的Mac对象。intgetMacLength()以字节为单位返回MAC的长度。ProvidergetProvider()返回此Mac对象的提供者。voidinit(Key key)使用给定键初始化此Mac对象。voidinit(Key key, AlgorithmParameterSpec params)使用给定的键和算法参数初始化此Mac对象。voidreset()重置此Mac对象。voidupdate(byte input)处理给定的字节。voidupdate(byte[] input)处理给定的字节数组。voidupdate(byte[] input, int offset, int len)处理第一len字节input,起始于offset以下。voidupdate(ByteBuffer input)处理input.remaining()在ByteBuffer的字节input,起始于input.position()。
-
-
-
方法详细信息
-
getAlgorithm
public final String getAlgorithm()
返回此Mac对象的算法名称。这与在创建此
Mac对象的getInstance调用之一中指定的名称相同。- 结果
-
此
Mac对象的算法名称。
-
getInstance
public static final Mac getInstance(String algorithm) throws NoSuchAlgorithmException
返回实现指定MAC算法的Mac对象。此方法遍历已注册的安全提供程序列表,从最首选的提供程序开始。 将返回从第一个支持指定算法的Provider封装MacSpi实现的新Mac对象。
请注意,可以通过
Security.getProviders()方法检索已注册提供商的列表。- Implementation Note:
-
JDK Reference Implementation还使用
jdk.security.provider.preferredSecurity属性来确定指定算法的首选提供程序顺序。 这可能与Security.getProviders()返回的提供商的顺序不同。 - 参数
-
algorithm- 请求的MAC算法的标准名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的Mac部分。 - 结果
-
新的
Mac对象 - 异常
-
NoSuchAlgorithmException- 如果没有Provider支持指定算法的MacSpi实现 -
NullPointerException- 如果algorithm是null - 另请参见:
-
Provider
-
getInstance
public static final Mac getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
返回实现指定MAC算法的Mac对象。将返回一个封装来自指定提供程序的MacSpi实现的新Mac对象。 必须在安全提供程序列表中注册指定的提供程序。
请注意,可以通过
Security.getProviders()方法检索已注册提供商的列表。- 参数
-
algorithm- 请求的MAC算法的标准名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的Mac部分。 -
provider- 提供者的名称。 - 结果
-
新的
Mac对象 - 异常
-
IllegalArgumentException- 如果provider是null或为空 -
NoSuchAlgorithmException- 如果指定的提供程序无法使用指定算法的MacSpi实现 -
NoSuchProviderException- 如果指定的提供程序未在安全提供程序列表中注册 -
NullPointerException- 如果algorithm是null - 另请参见:
-
Provider
-
getInstance
public static final Mac getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
返回实现指定MAC算法的Mac对象。将返回一个封装来自指定Provider对象的MacSpi实现的新Mac对象。 请注意,指定的Provider对象不必在提供程序列表中注册。
- 参数
-
algorithm- 请求的MAC算法的标准名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的Mac部分。 -
provider- 提供者。 - 结果
-
新的
Mac对象 - 异常
-
IllegalArgumentException- 如果provider是null -
NoSuchAlgorithmException- 如果指定的算法的MacSpi实现不可用于指定的Provider对象 -
NullPointerException- 如果algorithm是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处理给定的字节数组。- 参数
-
input- 要处理的字节数组。 - 异常
-
IllegalStateException- 如果此Mac尚未初始化。
-
update
public final void update(byte[] input, int offset, int len) throws IllegalStateException处理第一len字节input,起始于offset以下。- 参数
-
input- 输入缓冲区。 -
offset- 输入开始的input中的偏移量。 -
len- 要处理的字节数。 - 异常
-
IllegalStateException- 如果此Mac尚未初始化。
-
update
public final void update(ByteBuffer input)
处理input.remaining()在ByteBuffer的字节input,起始于input.position()。 返回时,缓冲区的位置将等于其限制; 它的限制不会改变。- 参数
-
input- ByteBuffer - 异常
-
IllegalStateException- 如果此Mac尚未初始化。 - 从以下版本开始:
- 1.5
-
doFinal
public final byte[] doFinal() throws IllegalStateException完成MAC操作。对此方法的调用会将此
Mac对象重置为先前通过调用init(Key)或init(Key, AlgorithmParameterSpec)初始化时init(Key)init(Key, AlgorithmParameterSpec)。 也就是说,如果需要,通过对update和doFinal新调用,对象被重置并可用于从同一密钥生成另一个MAC。 (为了使用不同的密钥重用此Mac对象,必须通过调用init(Key)或init(Key, AlgorithmParameterSpec)重新初始化该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)初始化时init(Key)init(Key, AlgorithmParameterSpec)。 也就是说,如果需要,通过对update和doFinal新调用,对象被重置并可用于从同一密钥生成另一个MAC。 (为了使用不同的密钥重用此Mac对象,必须通过调用init(Key)或init(Key, AlgorithmParameterSpec)重新初始化该init(Key, AlgorithmParameterSpec)。MAC结果存储在
output,起始于outOffset含)。- 参数
-
output- 存储MAC结果的缓冲区 -
outOffset- 存储MAC的output中的偏移量 - 异常
-
ShortBufferException- 如果给定的输出缓冲区太小而无法保存结果 -
IllegalStateException- 如果此Mac尚未初始化。
-
doFinal
public final byte[] doFinal(byte[] input) throws IllegalStateException处理给定的字节数组并完成MAC操作。对此方法的调用会将此
Mac对象重置为先前通过调用init(Key)或init(Key, AlgorithmParameterSpec)初始化时init(Key)init(Key, AlgorithmParameterSpec)。 也就是说,如果需要,通过对update和doFinal新调用,对象被重置并可用于从同一密钥生成另一个MAC。 (为了使用不同的密钥重用此Mac对象,必须通过调用init(Key)或init(Key, AlgorithmParameterSpec)重新初始化该init(Key, AlgorithmParameterSpec)。- 参数
-
input- 以字节为单位的数据 - 结果
- MAC结果。
- 异常
-
IllegalStateException- 如果此Mac尚未初始化。
-
reset
public final void reset()
重置此Mac对象。对此方法的调用会将此
Mac对象重置为先前通过调用init(Key)或init(Key, AlgorithmParameterSpec)初始化时init(Key)init(Key, AlgorithmParameterSpec)。 也就是说,如果需要,通过对update和doFinal新调用,对象被重置并可用于从同一密钥生成另一个MAC。 (为了使用不同的密钥重用此Mac对象,必须通过调用init(Key)或init(Key, AlgorithmParameterSpec)重新初始化该init(Key, AlgorithmParameterSpec)。
-
clone
public final Object clone() throws CloneNotSupportedException
如果提供程序实现是可克隆的,则返回克隆。- 重写:
-
clone在Object类 - 结果
- 如果提供程序实现是可复制的,则为克隆。
- 异常
-
CloneNotSupportedException- 如果在不支持Cloneable。 - 另请参见:
-
Cloneable
-
-