- 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 方法 描述 Object
clone()
如果提供程序实现是可克隆的,则返回克隆。byte[]
doFinal()
完成MAC操作。byte[]
doFinal(byte[] input)
处理给定的字节数组,并完成MAC操作。void
doFinal(byte[] output, int outOffset)
完成MAC操作。String
getAlgorithm()
返回此Mac
对象的算法名称。static Mac
getInstance(String algorithm)
返回实现指定MAC算法的Mac
对象。static Mac
getInstance(String algorithm, String provider)
返回实现指定MAC算法的Mac
对象。static Mac
getInstance(String algorithm, Provider 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)
处理给定的字节数组。void
update(byte[] input, int offset, int len)
处理第一len
字节input
,起始于offset
以下。void
update(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.preferred
Security
属性来确定指定算法的首选提供者顺序。 这可能与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
-
-