- 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
-
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 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()
在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.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()
在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
-
-