Module  java.base
软件包  java.security

Class SecureRandomSpi

  • All Implemented Interfaces:
    Serializable


    public abstract class SecureRandomSpi
    extends Object
    implements Serializable
    该类定义了SecureRandom类的 ( SPI )。

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

    实现要求:
    如果SecureRandomSpi(SecureRandomParameters)构造函数在实现中被覆盖,那么当实例化一个SecureRandom时,它总是被调用。 准确地说,如果对象是用一个实例SecureRandomgetInstance方法没有 SecureRandomParameters参数,构造函数会被一个叫null论证和实施负责创建自己的SecureRandomParameters使用参数时engineGetParameters()被调用。 如果使用 SecureRandomParameters参数的SecureRandomgetInstance方法中的一个实例化对象,则将使用该参数调用构造函数。 engineGetParameters()方法不能返回null

    否则,如果SecureRandomSpi(SecureRandomParameters)构造未实现覆盖,在SecureRandomSpi()构造函数必须重写,如果某个对象是使用的一个实例它会被称为SecureRandomgetInstance方法没有 SecureRandomParameters的说法。 使用 SecureRandomParameters参数调用SecureRandomgetInstance方法SecureRandomParameters将永远不会返回此实现的实例。 engineGetParameters()方法必须返回null

    有关线程安全性的更多详细信息,请参阅SecureRandom 默认情况下, SecureRandomSpi实现被认为对多个并发线程使用是不安全的,并且SecureRandom将同步对每个适用引擎方法的访问(有关方法列表,请参阅SecureRandom )。 但是,如果一个SecureRandomSpi实现是线程安全的,则service provider attribute “ThreadSafe”在其注册期间应设置为“true”,如下所示:

     put("SecureRandom.AlgName ThreadSafe", "true");
    要么
     putService(new Service(this, "SecureRandom", "AlgName", className,
              null, Map.of("ThreadSafe", "true")));
    SecureRandom将无需任何同步即可调用适用的引擎方法。
    从以下版本开始:
    1.2
    另请参见:
    Serialized Form
    • 构造方法详细信息

      • SecureRandomSpi

        public SecureRandomSpi​()
        没有参数的构造函数。
    • 方法详细信息

      • 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
        从以下版本开始:
        9
      • engineGenerateSeed

        protected abstract byte[] engineGenerateSeed​(int numBytes)
        返回给定的种子字节数。 该呼叫可以用于种子其他随机数发生器。
        参数
        numBytes - 要生成的种子字节数。
        结果
        种子字节。
      • toString

        public String toString​()
        返回此 SecureRandom的人类可读字符串表示 SecureRandom
        重写:
        toString中的 Object
        结果
        字符串表示