java.lang.Object
java.security.SecureRandomSpi
- 所有已实现的接口:
-
Serializable
该类定义了
SecureRandom
类的服务提供者接口(SPI)。
该类中的所有抽象方法必须由每个希望提供加密强大伪随机数生成器实现的服务提供者来实现。
- 实现要求:
-
如果在实现中重写了
SecureRandomSpi(SecureRandomParameters)
构造函数,那么每当实例化一个SecureRandom
时,它将始终被调用。具体来说,如果使用SecureRandom
的getInstance
方法之一实例化对象时没有使用SecureRandomParameters
参数,则构造函数将使用null
参数调用,并且实现负责为在调用engineGetParameters()
时使用的自己创建SecureRandomParameters
参数。如果使用SecureRandom
的getInstance
方法之一实例化对象时使用了SecureRandomParameters
参数,则将使用该参数调用构造函数。engineGetParameters()
方法不得返回null
。否则,如果在实现中未重写
SecureRandomSpi(SecureRandomParameters)
构造函数,则必须重写SecureRandomSpi()
构造函数,并且如果使用SecureRandom
的getInstance
方法之一实例化对象时没有使用SecureRandomParameters
参数,则将调用该构造函数。使用SecureRandom
的getInstance
方法之一实例化对象时使用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 Summary
ModifierConstructorDescription不带参数的构造函数。protected
带参数的构造函数。 -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract byte[]
engineGenerateSeed
(int numBytes) 返回给定数量的种子字节。protected SecureRandomParameters
返回此SecureRandom
实例的有效SecureRandomParameters
。protected abstract void
engineNextBytes
(byte[] bytes) 生成用户指定数量的随机字节。protected void
engineNextBytes
(byte[] bytes, SecureRandomParameters params) 生成带有附加参数的用户指定数量的随机字节。protected void
engineReseed
(SecureRandomParameters params) 使用从熵源读取的熵输入和附加参数重新设置此随机对象。protected abstract void
engineSetSeed
(byte[] seed) 使用给定的种子重新设置此随机对象。toString()
返回此SecureRandom
的可读字符串表示形式。
-
Constructor Details
-
SecureRandomSpi
public SecureRandomSpi()不带参数的构造函数。 -
SecureRandomSpi
带参数的构造函数。- 参数:
-
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
生成带有附加参数的用户指定数量的随机字节。某些随机数生成器每次调用只能生成有限数量的随机字节。如果
bytes
的大小大于此限制,则实现应在从此方法返回之前多次调用其生成过程,以完全填充缓冲区。- 实现要求:
-
默认实现会抛出一个
UnsupportedOperationException
。 - 参数:
-
bytes
- 用随机字节填充的数组 -
params
- 附加参数 - 抛出:
-
UnsupportedOperationException
- 如果实现未重写此方法 -
IllegalArgumentException
- 如果params
为null
,非法或不受此SecureRandom
支持 - 自 JDK 版本:
- 9
-
engineGenerateSeed
protected abstract byte[] engineGenerateSeed(int numBytes) 返回给定数量的种子字节。此调用可用于为其他随机数生成器提供种子。- 参数:
-
numBytes
- 要生成的种子字节数。 - 返回:
- 种子字节。
-
engineReseed
使用从熵源读取的熵输入和附加参数重新设置此随机对象。如果此方法由
SecureRandom.reseed()
调用,则params
将为null
。如果实现不支持重新设置,请不要重写此方法。
- 实现要求:
-
默认实现会抛出一个
UnsupportedOperationException
。 - 参数:
-
params
- 额外参数,可以为null
。 - 抛出:
-
UnsupportedOperationException
- 如果实现未重写此方法 -
IllegalArgumentException
- 如果params
是非法的或不受此SecureRandom
支持 - 自 JDK 版本:
- 9
-
engineGetParameters
返回此SecureRandom
实例的有效SecureRandomParameters
。- 实现要求:
-
默认实现会返回
null
。 - 返回:
-
有效的
SecureRandomParameters
参数,如果未使用任何参数,则返回null
。 - 自 JDK 版本:
- 9
-
toString
返回此SecureRandom
的可读字符串表示形式。
-