模块 java.base

类 PBEKeySpec

java.lang.Object
javax.crypto.spec.PBEKeySpec
所有已实现的接口:
KeySpec

public class PBEKeySpec extends Object implements KeySpec
用户选择的密码,可用于基于密码的加密 (PBE).

密码可以被视为某种原始密钥材料,使用它的加密机制从中派生出加密密钥。

不同的 PBE 机制可能会消耗每个密码字符的不同位。例如, PKCS #5 中定义的 PBE 机制只查看每个字符的低 8 位,而 PKCS #12 查看每个字符的所有 16 位。

您可以通过创建适当的密钥工厂实例将密码字符转换为 PBE 密钥。例如,PKCS #5 的密钥工厂将仅从每个密码字符的低 8 位构建 PBE 密钥,而 PKCS #12 的密钥工厂将获取每个字符的所有 16 位。

另请注意,此类将密码存储为 char 数组而不是 String 对象(这看起来更合乎逻辑),因为 String 类是不可变的,并且当不再需要存储在其中的密码时无法覆盖其内部值。因此,此类将密码请求为 char 数组,以便在完成后可以将其覆盖。

自从:
1.4
参见:
  • 构造方法总结

    构造方法
    构造方法
    描述
    PBEKeySpec(char[] password)
    采用密码的构造方法。
    PBEKeySpec(char[] password, byte[] salt, int iterationCount)
    采用密码、salt、迭代计数来生成固定密钥大小 PBE 密码的 PBEKey 的构造方法。
    PBEKeySpec(char[] password, byte[] salt, int iterationCount, int keyLength)
    采用密码、salt、迭代计数和要派生的密钥长度来生成可变密钥大小 PBE 密码的 PBEKey 的构造方法。
  • 方法总结

    修饰符和类型
    方法
    描述
    final void
    清除密码的内部副本。
    final int
    如果未指定,则返回迭代计数或 0。
    final int
    返回要派生的密钥长度,如果未指定,则返回 0。
    final char[]
    返回密码的副本。
    final byte[]
    如果未指定,则返回 salt 或 null 的副本。

    在类 java.lang.Object 中声明的方法

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 构造方法详细信息

    • PBEKeySpec

      public PBEKeySpec(char[] password)
      采用密码的构造方法。如果指定了 null,则使用空的 char[]。

      注意:password 在存储到新的 PBEKeySpec 对象之前被克隆。

      参数:
      password - 密码。
    • PBEKeySpec

      public PBEKeySpec(char[] password, byte[] salt, int iterationCount, int keyLength)
      采用密码、salt、迭代计数和要派生的密钥长度来生成可变密钥大小 PBE 密码的 PBEKey 的构造函数。如果为 password 指定了 null,则使用空 char[]。

      注意:passwordsalt 在存储到新的 PBEKeySpec 对象之前被克隆。

      参数:
      password - 密码。
      salt - 盐。
      iterationCount - 迭代次数。
      keyLength - 要派生的密钥长度。
      抛出:
      NullPointerException - 如果 salt 为空。
      IllegalArgumentException - 如果 salt 为空,即 0 长度,iterationCountkeyLength 不是正数。
    • PBEKeySpec

      public PBEKeySpec(char[] password, byte[] salt, int iterationCount)
      采用密码、salt、迭代计数来生成固定密钥大小 PBE 密码的 PBEKey 的构造函数。如果为 password 指定了 null,则使用空 char[]。

      注意:passwordsalt 在存储到新的 PBEKeySpec 对象之前被克隆。

      参数:
      password - 密码。
      salt - 盐。
      iterationCount - 迭代次数。
      抛出:
      NullPointerException - 如果 salt 为空。
      IllegalArgumentException - 如果 salt 为空,即 0 长度,或者 iterationCount 不是正数。
  • 方法详情

    • clearPassword

      public final void clearPassword()
      清除密码的内部副本。
    • getPassword

      public final char[] getPassword()
      返回密码的副本。

      注意:此方法返回密码的副本。调用者有责任在不再需要密码信息后将其清零。

      返回:
      密码。
      抛出:
      IllegalStateException - 如果密码已通过调用 clearPassword 方法清除。
    • getSalt

      public final byte[] getSalt()
      如果未指定,则返回 salt 或 null 的副本。

      注意:此方法应返回盐的副本。调用者有责任在不再需要盐信息后将其清零。

      返回:
      盐。
    • getIterationCount

      public final int getIterationCount()
      如果未指定,则返回迭代计数或 0。
      返回:
      迭代次数。
    • getKeyLength

      public final int getKeyLength()
      返回要派生的密钥长度,如果未指定,则返回 0。

      注意:这用于指示可变密钥大小密码的密钥长度首选项。实际密钥大小取决于每个提供程序的实现。

      返回:
      待派生的密钥长度。