public class Mac
extends Object
implements Cloneable
java.lang.Object | |
↳ | javax.crypto.Mac |
这个类提供了“消息认证码”(MAC)算法的功能。
基于密钥,MAC提供了一种方法来检查通过或存储在不可靠介质中的信息的完整性。 通常,在共享密钥的双方之间使用消息认证码以验证在这些方之间传输的信息。
基于密码散列函数的MAC机制被称为HMAC。 HMAC可以与任何加密散列函数一起使用,例如,MD5或SHA-1,以及秘密共享密钥。 HMAC在RFC 2104中指定。
Android提供了以下 Mac
算法
Name | Supported (API Levels) |
---|---|
DESedeMAC | 1–8 |
DESedeMAC/CFB8 | 1–8 |
DESedeMAC64 | 1–8 |
DESMAC | 1–8 |
DESMAC/CFB8 | 1–8 |
DESwithISO9797 | 1–8 |
HmacMD5 | 1+ |
HmacSHA1 | 1+ |
HmacSHA224 | 1–8, 22+ |
HmacSHA256 | 1+ |
HmacSHA384 | 1+ |
HmacSHA512 | 1+ |
ISO9797ALG3MAC | 1–8 |
PBEwithHmacSHA | 1+ |
PBEwithHmacSHA1 | 1+ |
Protected constructors |
|
---|---|
Mac(MacSpi macSpi, Provider provider, String algorithm) 创建一个MAC对象。 |
Public methods |
|
---|---|
final Object |
clone() 如果提供者实现是可复制的,则返回一个克隆。 |
final byte[] |
doFinal(byte[] input) 处理给定的字节数组并完成MAC操作。 |
final void |
doFinal(byte[] output, int outOffset) 完成MAC操作。 |
final byte[] |
doFinal() 完成MAC操作。 |
final String |
getAlgorithm() 返回此 |
static final Mac |
getInstance(String algorithm) 返回实现指定MAC算法的 |
static final Mac |
getInstance(String algorithm, String provider) 返回实现指定MAC算法的 |
static final Mac |
getInstance(String algorithm, Provider provider) 返回实现指定MAC算法的 |
final int |
getMacLength() 以字节为单位返回MAC的长度。 |
final Provider |
getProvider() 返回此 |
final void |
init(Key key, AlgorithmParameterSpec params) 使用给定的密钥和算法参数初始化此对象 |
final void |
init(Key key) 用给定的键初始化此 |
final void |
reset() 重置此 |
final void |
update(byte[] input) 处理给定的字节数组。 |
final void |
update(byte[] input, int offset, int len) 处理第一 |
final void |
update(ByteBuffer input) 处理 |
final void |
update(byte input) 处理给定的字节。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
Mac (MacSpi macSpi, Provider provider, String algorithm)
创建一个MAC对象。
Parameters | |
---|---|
macSpi |
MacSpi : the delegate |
provider |
Provider : the provider |
algorithm |
String : the algorithm |
Object clone ()
如果提供者实现是可复制的,则返回一个克隆。
Returns | |
---|---|
Object |
a clone if the provider implementation is cloneable. |
Throws | |
---|---|
CloneNotSupportedException |
if this is called on a delegate that does not support Cloneable . |
byte[] doFinal (byte[] input)
处理给定的字节数组并完成MAC操作。
此方法的调用重置该Mac
目的是它是当先前经由到呼叫初始化的状态init(Key)
或init(Key, AlgorithmParameterSpec)
。 也就是说,如果需要,该对象将重置并可用于通过对update
和doFinal
新呼叫从相同密钥生成另一个MAC。 (为了使用不同的密钥重新使用这个Mac
对象,必须通过调用init(Key)
或init(Key, AlgorithmParameterSpec)
来重新初始化它。
Parameters | |
---|---|
input |
byte : data in bytes |
Returns | |
---|---|
byte[] |
the MAC result. |
Throws | |
---|---|
IllegalStateException |
if this Mac has not been initialized. |
void doFinal (byte[] output, int outOffset)
完成MAC操作。
此方法的调用重置该Mac
目的是它是当先前经由到呼叫初始化的状态init(Key)
或init(Key, AlgorithmParameterSpec)
。 也就是说,如果需要,该对象将被重置并可用于通过对update
和doFinal
新调用从同一个密钥生成另一个MAC。 (为了重新使用此Mac
用不同的密钥对象时,它必须通过将呼叫重新初始化init(Key)
或init(Key, AlgorithmParameterSpec)
。
MAC结果存储在 output
,从 outOffset
开始。
Parameters | |
---|---|
output |
byte : the buffer where the MAC result is stored |
outOffset |
int : the offset in output where the MAC is stored |
Throws | |
---|---|
ShortBufferException |
if the given output buffer is too small to hold the result |
IllegalStateException |
if this Mac has not been initialized. |
byte[] doFinal ()
完成MAC操作。
此方法的调用重置该Mac
目的是它是当先前经由到呼叫初始化的状态init(Key)
或init(Key, AlgorithmParameterSpec)
。 也就是说,如果需要,该对象将被重置并可用于通过对update
和doFinal
新调用从同一个密钥生成另一个MAC。 (为了使用不同的密钥重新使用这个Mac
对象,它必须通过调用init(Key)
或init(Key, AlgorithmParameterSpec)
重新初始化。
Returns | |
---|---|
byte[] |
the MAC result. |
Throws | |
---|---|
IllegalStateException |
if this Mac has not been initialized. |
String getAlgorithm ()
返回此 Mac
对象的算法名称。
这与在创建此 Mac
对象的 getInstance
调用之一中指定的名称相同。
Returns | |
---|---|
String |
the algorithm name of this Mac object. |
Mac getInstance (String algorithm)
返回实现指定MAC算法的 Mac
对象。
该方法遍历注册安全提供程序的列表,从最优先的提供程序开始。 返回封装来自支持指定算法的第一个Provider的MacSpi实现的新Mac对象。
请注意,注册供应商列表可能通过 Security.getProviders()
方法检索。
Parameters | |
---|---|
algorithm |
String : the standard name of the requested MAC algorithm. See the Mac section in the Java Cryptography Architecture Standard Algorithm Name Documentation for information about standard algorithm names. |
Returns | |
---|---|
Mac |
the new Mac object. |
Throws | |
---|---|
NoSuchAlgorithmException |
if no Provider supports a MacSpi implementation for the specified algorithm. |
也可以看看:
Mac getInstance (String algorithm, String provider)
返回实现指定MAC算法的 Mac
对象。
返回封装指定提供程序的MacSpi实现的新Mac对象。 指定的提供者必须在安全提供者列表中注册。
请注意,注册供应商列表可能通过 Security.getProviders()
方法检索。
Parameters | |
---|---|
algorithm |
String : the standard name of the requested MAC algorithm. See the Mac section in the Java Cryptography Architecture Standard Algorithm Name Documentation for information about standard algorithm names. |
provider |
String : the name of the provider. |
Returns | |
---|---|
Mac |
the new Mac object. |
Throws | |
---|---|
NoSuchAlgorithmException |
if a MacSpi implementation for the specified algorithm is not available from the specified provider. |
NoSuchProviderException |
if the specified provider is not registered in the security provider list. |
IllegalArgumentException |
if the provider is null or empty. |
也可以看看:
Mac getInstance (String algorithm, Provider provider)
返回实现指定MAC算法的 Mac
对象。
返回封装指定Provider对象的MacSpi实现的新Mac对象。 请注意,指定的Provider对象不必在提供程序列表中注册。
Parameters | |
---|---|
algorithm |
String : the standard name of the requested MAC algorithm. See the Mac section in the Java Cryptography Architecture Standard Algorithm Name Documentation for information about standard algorithm names. |
provider |
Provider : the provider. |
Returns | |
---|---|
Mac |
the new Mac object. |
Throws | |
---|---|
NoSuchAlgorithmException |
if a MacSpi implementation for the specified algorithm is not available from the specified Provider object. |
IllegalArgumentException |
if the provider is null. |
也可以看看:
int getMacLength ()
以字节为单位返回MAC的长度。
Returns | |
---|---|
int |
the MAC length in bytes. |
Provider getProvider ()
返回此 Mac
对象的提供者。
Returns | |
---|---|
Provider |
the provider of this Mac object. |
void init (Key key, AlgorithmParameterSpec params)
用给定的密钥和算法参数初始化此对象 Mac
。
Parameters | |
---|---|
key |
Key : the key. |
params |
AlgorithmParameterSpec : the algorithm parameters. |
Throws | |
---|---|
InvalidKeyException |
if the given key is inappropriate for initializing this MAC. |
InvalidAlgorithmParameterException |
if the given algorithm parameters are inappropriate for this MAC. |
void init (Key key)
使用给定的键初始化此 Mac
对象。
Parameters | |
---|---|
key |
Key : the key. |
Throws | |
---|---|
InvalidKeyException |
if the given key is inappropriate for initializing this MAC. |
void reset ()
重置此 Mac
对象。
此方法的调用重置该Mac
目的是它是当先前经由到呼叫初始化的状态init(Key)
或init(Key, AlgorithmParameterSpec)
。 也就是说,如果需要,该对象被重置并可用于通过对update
和doFinal
新调用从同一个密钥生成另一个MAC。 (为了重新使用此Mac
用不同的密钥对象时,它必须通过将呼叫重新初始化init(Key)
或init(Key, AlgorithmParameterSpec)
。
void update (byte[] input)
处理给定的字节数组。
Parameters | |
---|---|
input |
byte : the array of bytes to be processed. |
Throws | |
---|---|
IllegalStateException |
if this Mac has not been initialized. |
void update (byte[] input, int offset, int len)
处理第一 len
字节 input
,起始于 offset
以下。
Parameters | |
---|---|
input |
byte : the input buffer. |
offset |
int : the offset in input where the input starts. |
len |
int : the number of bytes to process. |
Throws | |
---|---|
IllegalStateException |
if this Mac has not been initialized. |
void update (ByteBuffer input)
处理input.remaining()
在ByteBuffer的字节input
,起始于input.position()
。 返回时,缓冲区的位置将等于它的极限; 其限制不会改变。
Parameters | |
---|---|
input |
ByteBuffer : the ByteBuffer |
Throws | |
---|---|
IllegalStateException |
if this Mac has not been initialized. |
void update (byte input)
处理给定的字节。
Parameters | |
---|---|
input |
byte : the input byte to be processed. |
Throws | |
---|---|
IllegalStateException |
if this Mac has not been initialized. |