模块  java.base
软件包  javax.crypto

Class Mac

  • 实现的所有接口
    Cloneable

    public class Mac
    extends Object
    implements Cloneable
    此类提供“消息验证代码”(MAC)算法的功能。

    MAC提供了一种基于秘密密钥检查在不可靠介质上传输或存储在不可靠介质中的信息的完整性的方法。 通常,在共享密钥的两方之间使用消息认证码,以便验证在这些方之间传输的信息。

    基于加密散列函数的MAC机制被称为HMAC。 HMAC可以与任何加密散列函数(例如,SHA256或SHA384)一起使用,并结合秘密共享密钥。 HMAC在RFC 2104中指定。

    需要Java平台的每个实现来支持以下标准Mac算法:

    • HmacMD5
    • HmacSHA1
    • HmacSHA256
    这些算法在Java安全标准算法名称规范的Mac section中描述。 请参阅实现的发行文档,以了解是否支持任何其他算法。
    从以下版本开始:
    1.4
    • 构造方法详细信息

      • Mac

        protected Mac​(MacSpi macSpi,
                      Provider provider,
                      String algorithm)
        创建MAC对象。
        参数
        macSpi - 代表
        provider - 提供者
        algorithm - 算法
    • 方法详细信息

      • 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 - 如果 algorithmnull
        另请参见:
        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。
      • 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) 也就是说,如果需要,通过对updatedoFinal新调用,对象被重置并可用于从同一密钥生成另一个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) 也就是说,如果需要,通过对updatedoFinal新调用,对象被重置并可用于从同一密钥生成另一个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) 也就是说,如果需要,通过对updatedoFinal新调用,对象被重置并可用于从同一密钥生成另一个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) 也就是说,如果需要,通过对updatedoFinal新调用,对象被重置并可用于从同一密钥生成另一个MAC。 (为了使用不同的密钥重用此Mac对象,必须通过调用init(Key)init(Key, AlgorithmParameterSpec)重新初始化该init(Key, AlgorithmParameterSpec)