Module java.base
Package javax.crypto

Class Mac

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算法:

  • HmacSHA1
  • HmacSHA256
这些算法在Java安全标准算法名称规范的 Mac部分中有描述。请查阅您的实现的发布文档,以查看是否支持任何其他算法。
自版本:
1.4
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    Mac(MacSpi macSpi, Provider provider, String algorithm)
    创建一个MAC对象。
  • Method Summary

    Modifier and Type
    Method
    Description
    final Object
    clone()
    如果提供程序实现是可克隆的,则返回一个克隆对象。
    final byte[]
    完成MAC操作。
    final byte[]
    doFinal(byte[] input)
    处理给定的字节数组并完成MAC操作。
    final void
    doFinal(byte[] output, int outOffset)
    完成MAC操作。
    final String
    返回此Mac对象的算法名称。
    static final Mac
    getInstance(String algorithm)
    返回实现指定MAC算法的Mac对象。
    static final Mac
    getInstance(String algorithm, String provider)
    返回实现指定MAC算法的Mac对象。
    static final Mac
    getInstance(String algorithm, Provider provider)
    返回实现指定MAC算法的Mac对象。
    final int
    返回MAC的字节长度。
    final Provider
    返回此Mac对象的提供程序。
    final void
    init(Key key)
    使用给定的密钥初始化此Mac对象。
    final void
    使用给定的密钥和算法参数初始化此Mac对象。
    final void
    reset()
    重置此Mac对象。
    final void
    update(byte input)
    处理给定的字节。
    final void
    update(byte[] input)
    处理给定的字节数组。
    final void
    update(byte[] input, int offset, int len)
    处理input中从offset开始的前len字节。
    final void
    update(ByteBuffer input)
    处理ByteBuffer input中从input.position()开始的input.remaining()字节。

    Methods declared in class java.lang.Object

    equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • Mac

      protected Mac(MacSpi macSpi, Provider provider, String algorithm)
      创建一个MAC对象。
      参数:
      macSpi - 代理
      provider - 提供程序
      algorithm - 算法
  • Method Details

    • getAlgorithm

      public final String getAlgorithm()
      返回此Mac对象的算法名称。

      这是在创建此Mac对象的getInstance调用中指定的相同名称。

      返回:
      Mac对象的算法名称。
    • getInstance

      public static final Mac getInstance(String algorithm) throws NoSuchAlgorithmException
      返回实现指定MAC算法的Mac对象。

      此方法遍历已注册的安全提供程序列表,从最首选的提供程序开始。返回一个新的Mac对象,封装了第一个支持指定算法的MacSpi实现的提供程序。

      请注意,已注册提供程序的列表可以通过Security.getProviders()方法检索。

      实现注意:
      JDK参考实现另外使用jdk.security.provider.preferred Security属性来确定指定算法的首选提供程序顺序。这可能与由Security.getProviders()返回的提供程序顺序不同。
      参数:
      algorithm - 请求的MAC算法的标准名称。有关标准算法名称的信息,请参阅 Java安全标准算法名称规范中的Mac部分。
      返回:
      新的Mac对象
      抛出:
      NoSuchAlgorithmException - 如果没有Provider支持指定算法的MacSpi实现
      NullPointerException - 如果algorithmnull
      参见:
    • getInstance

      public static final Mac getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
      返回实现指定MAC算法的Mac对象。

      返回一个新的Mac对象,封装了指定提供程序的MacSpi实现。指定的提供程序必须在安全提供程序列表中注册。

      请注意,已注册提供程序的列表可以通过Security.getProviders()方法检索。

      参数:
      algorithm - 请求的MAC算法的标准名称。有关标准算法名称的信息,请参阅 Java安全标准算法名称规范中的Mac部分。
      provider - 提供程序的名称。
      返回:
      新的Mac对象
      抛出:
      IllegalArgumentException - 如果providernull或空
      NoSuchAlgorithmException - 如果指定提供程序中不可用指定算法的MacSpi实现
      NoSuchProviderException - 如果指定提供程序未在安全提供程序列表中注册
      NullPointerException - 如果algorithmnull
      参见:
    • getInstance

      public static final Mac getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
      返回实现指定MAC算法的Mac对象。

      返回一个新的Mac对象,封装了指定提供程序的MacSpi实现。请注意,指定的提供程序不必在提供程序列表中注册。

      参数:
      algorithm - 请求的MAC算法的标准名称。有关标准算法名称的信息,请参阅 Java安全标准算法名称规范中的Mac部分。
      provider - 提供程序。
      返回:
      新的Mac对象
      抛出:
      IllegalArgumentException - 如果providernull
      NoSuchAlgorithmException - 如果指定Provider对象中不可用指定算法的MacSpi实现
      NullPointerException - 如果algorithmnull
      参见:
    • 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
      处理input中从offset开始的前len字节。
      参数:
      input - 输入缓冲区。
      offset - 输入开始的偏移量。
      len - 要处理的字节数。
      抛出:
      IllegalStateException - 如果此Mac尚未初始化。
    • update

      public final void update(ByteBuffer input)
      在ByteBuffer input中处理input.remaining()字节,从input.position()开始。返回时,缓冲区的位置将等于其限制;其限制不会改变。
      参数:
      input - ByteBuffer
      抛出:
      IllegalStateException - 如果此Mac尚未初始化。
      IllegalArgumentException - 如果input为null
      自从:
      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)重新初始化该对象)。

    • clone

      public final Object clone() throws CloneNotSupportedException
      如果提供程序实现支持克隆,则返回克隆。
      覆盖:
      clone 在类 Object
      返回:
      如果提供程序实现支持克隆,则返回克隆。
      抛出:
      CloneNotSupportedException - 如果在不支持Cloneable的委托上调用此方法。
      参见: