Module  java.base
软件包  javax.crypto

Class 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
    这些算法在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对象。

        此方法遍历已注册的安全提供程序列表,从最优选的提供程序开始。 返回从支持指定算法的第一个提供者封装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 - 如果 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)初始化的状态。 也就是说,如果需要,通过对updatedoFinal新呼叫,对象被重置并可用于从相同的密钥生成另一个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)初始化的状态。 也就是说,如果需要,通过对updatedoFinal新呼叫,对象被重置并可用于从相同的密钥生成另一个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)初始化的状态。 也就是说,如果需要,通过对updatedoFinal新呼叫,对象被重置并可用于从相同的密钥生成另一个MAC。 (为了使用不同的密钥重新使用此Mac对象,必须通过调用init(Key)init(Key, AlgorithmParameterSpec)重新初始化该对象。

        参数
        input - 以字节为单位的数据
        结果
        MAC结果。
        异常
        IllegalStateException - 如果这个 Mac尚未初始化。
      • reset

        public final void reset​()
        重设此Mac对象。

        调用此方法将此Mac对象重置为之前通过调用init(Key)init(Key, AlgorithmParameterSpec)初始化的状态。 也就是说,如果需要,通过对updatedoFinal新呼叫,该对象被重置并可用于从相同的密钥生成另一个MAC。 (为了使用不同的密钥重新使用此Mac对象,必须通过调用init(Key)init(Key, AlgorithmParameterSpec)重新初始化该对象。