Module java.base
Package java.security

Class SecureRandomSpi

java.lang.Object
java.security.SecureRandomSpi
所有已实现的接口:
Serializable

public abstract class SecureRandomSpi extends Object implements Serializable
该类定义了SecureRandom类的服务提供者接口SPI)。

该类中的所有抽象方法必须由每个希望提供加密强大伪随机数生成器实现的服务提供者来实现。

实现要求:
如果在实现中重写了SecureRandomSpi(SecureRandomParameters)构造函数,那么每当实例化一个SecureRandom时,它将始终被调用。具体来说,如果使用SecureRandomgetInstance方法之一实例化对象时没有使用SecureRandomParameters参数,则构造函数将使用null参数调用,并且实现负责为在调用engineGetParameters()时使用的自己创建SecureRandomParameters参数。如果使用SecureRandomgetInstance方法之一实例化对象时使用了SecureRandomParameters参数,则将使用该参数调用构造函数。 engineGetParameters()方法不得返回null

否则,如果在实现中未重写SecureRandomSpi(SecureRandomParameters)构造函数,则必须重写SecureRandomSpi()构造函数,并且如果使用SecureRandomgetInstance方法之一实例化对象时没有使用SecureRandomParameters参数,则将调用该构造函数。使用SecureRandomgetInstance方法之一实例化对象时使用SecureRandomParameters参数将永远不会返回此实现的实例。 engineGetParameters()方法必须返回null

有关线程安全性的其他详细信息,请参见SecureRandom。默认情况下,SecureRandomSpi实现被认为不适合供多个并发线程使用,SecureRandom将同步访问每个适用的引擎方法(请参见SecureRandom以获取方法列表)。但是,如果SecureRandomSpi实现是线程安全的,则应在其注册期间将服务提供者属性“ThreadSafe”设置为“true”,如下所示:

 put("SecureRandom.AlgName ThreadSafe", "true");
 putService(new Service(this, "SecureRandom", "AlgName", className,
          null, Map.of("ThreadSafe", "true")));
SecureRandom将在没有任何同步的情况下调用适用的引擎方法。
自 JDK 版本:
1.2
参见:
  • Constructor Details

    • SecureRandomSpi

      public SecureRandomSpi()
      不带参数的构造函数。
    • SecureRandomSpi

      protected SecureRandomSpi(SecureRandomParameters params)
      带参数的构造函数。
      参数:
      params - SecureRandomParameters对象。此参数可以为null
      抛出:
      IllegalArgumentException - 如果params在此SecureRandom中不可识别或不受支持
      自 JDK 版本:
      9
  • Method Details

    • engineSetSeed

      protected abstract void engineSetSeed(byte[] seed)
      使用给定的种子重新设置此随机对象。该种子是对现有种子的补充,而不是替换。因此,重复调用将始终不会减少随机性。
      参数:
      seed - 种子。
    • engineNextBytes

      protected abstract void engineNextBytes(byte[] bytes)
      生成用户指定数量的随机字节。

      某些随机数生成器每次调用只能生成有限数量的随机字节。如果bytes的大小大于此限制,则实现应在从此方法返回之前多次调用其生成过程,以完全填充缓冲区。

      参数:
      bytes - 用随机字节填充的数组。
    • engineNextBytes

      protected void engineNextBytes(byte[] bytes, SecureRandomParameters params)
      生成带有附加参数的用户指定数量的随机字节。

      某些随机数生成器每次调用只能生成有限数量的随机字节。如果bytes的大小大于此限制,则实现应在从此方法返回之前多次调用其生成过程,以完全填充缓冲区。

      实现要求:
      默认实现会抛出一个UnsupportedOperationException
      参数:
      bytes - 用随机字节填充的数组
      params - 附加参数
      抛出:
      UnsupportedOperationException - 如果实现未重写此方法
      IllegalArgumentException - 如果paramsnull,非法或不受此SecureRandom支持
      自 JDK 版本:
      9
    • engineGenerateSeed

      protected abstract byte[] engineGenerateSeed(int numBytes)
      返回给定数量的种子字节。此调用可用于为其他随机数生成器提供种子。
      参数:
      numBytes - 要生成的种子字节数。
      返回:
      种子字节。
    • engineReseed

      protected void engineReseed(SecureRandomParameters params)
      使用从熵源读取的熵输入和附加参数重新设置此随机对象。

      如果此方法由SecureRandom.reseed()调用,则params将为null

      如果实现不支持重新设置,请不要重写此方法。

      实现要求:
      默认实现会抛出一个UnsupportedOperationException
      参数:
      params - 额外参数,可以为null
      抛出:
      UnsupportedOperationException - 如果实现未重写此方法
      IllegalArgumentException - 如果params是非法的或不受此SecureRandom支持
      自 JDK 版本:
      9
    • engineGetParameters

      protected SecureRandomParameters engineGetParameters()
      返回此SecureRandom实例的有效SecureRandomParameters
      实现要求:
      默认实现会返回null
      返回:
      有效的SecureRandomParameters参数,如果未使用任何参数,则返回null
      自 JDK 版本:
      9
    • toString

      public String toString()
      返回此SecureRandom的可读字符串表示形式。
      覆盖:
      toString 在类 Object
      返回:
      字符串表示形式