- java.lang.Object
-
- javax.crypto.Mac
-
- All Implemented Interfaces:
-
Cloneable
public class Mac extends Object implements Cloneable
该类提供了“消息验证码”(MAC)算法的功能。MAC提供了一种基于秘密密钥来检查在不可靠介质上传输或存储在信息中的信息的完整性的方法。 通常,在共享密钥的两方之间使用消息认证码,以验证在这些方之间传输的信息。
基于加密散列函数的MAC机制被称为HMAC。 HMAC可以与任何加密散列函数一起使用,例如MD5或SHA-1与秘密共享密钥的组合。 HMAC在RFC 2104中规定。
Java平台的每个实现都需要支持以下标准的
Mac算法:-
HmacMD5 -
HmacSHA1 -
HmacSHA256
- 从以下版本开始:
- 1.4
-
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 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()字节的ByteBufferinput,从input.position()开始。
-
-
-
方法详细信息
-
getAlgorithm
public final String getAlgorithm()
返回此Mac对象的算法名称。这是在创建此
Mac对象的getInstance呼叫之一中指定的名称。- 结果
-
这个
Mac对象的算法名称。
-
getInstance
public static final Mac getInstance(String algorithm) throws NoSuchAlgorithmException
返回实现指定MAC算法的Mac对象。此方法遍历已注册的安全提供程序列表,从最优选的提供程序开始。 返回从支持指定算法的第一个提供者封装MacSpi实现的新Mac对象。
请注意,注册提供商的列表可以通过
Security.getProviders()方法检索。- Implementation Note:
-
JDK参考实现另外使用
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()字节的ByteBufferinput,从input.position()开始。 返回时,缓冲区的位置将等于其限制; 其限制将不会改变。- 参数
-
input- ByteBuffer - 异常
-
IllegalStateException- 如果此Mac尚未初始化。 - 从以下版本开始:
- 1.5
-
doFinal
public final byte[] doFinal() throws IllegalStateException完成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
public final byte[] doFinal(byte[] input) throws IllegalStateException处理给定的字节数组,并完成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
public final Object clone() throws CloneNotSupportedException
如果提供程序实现是可克隆的,则返回克隆。- 重写:
-
clone在Object - 结果
- 一个克隆,如果提供者实现是可克隆的。
- 异常
-
CloneNotSupportedException- 如果这是在不支持Cloneable的委托上调用的。 - 另请参见:
-
Cloneable
-
-