- java.lang.Object
-
- java.security.SecureRandomSpi
-
- All Implemented Interfaces:
-
Serializable
public abstract class SecureRandomSpi extends Object implements Serializable
该类定义了SecureRandom类的 ( SPI )。该类中的所有抽象方法必须由希望提供加密强伪随机数生成器的实现的每个服务提供者来实现。
- 实现要求:
-
如果
SecureRandomSpi(SecureRandomParameters)构造函数在实现中被覆盖,那么当实例化一个SecureRandom时,它总是被调用。 准确地说,如果对象是用一个实例SecureRandom的getInstance方法没有SecureRandomParameters参数,构造函数会被一个叫null论证和实施负责创建自己的SecureRandomParameters使用参数时engineGetParameters()被调用。 如果使用SecureRandomParameters参数的SecureRandom的getInstance方法中的一个实例化对象,则将使用该参数调用构造函数。engineGetParameters()方法不能返回null。否则,如果
SecureRandomSpi(SecureRandomParameters)构造未实现覆盖,在SecureRandomSpi()构造函数必须重写,如果某个对象是使用的一个实例它会被称为SecureRandom的getInstance方法没有SecureRandomParameters的说法。 使用SecureRandomParameters参数调用SecureRandom的getInstance方法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
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 SecureRandomSpi()没有参数的构造函数。protectedSecureRandomSpi(SecureRandomParameters params)具有参数的构造方法
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 protected abstract byte[]engineGenerateSeed(int numBytes)返回给定的种子字节数。protected SecureRandomParametersengineGetParameters()返回此SecureRandom实例的有效SecureRandomParameters。protected abstract voidengineNextBytes(byte[] bytes)生成用户指定的随机字节数。protected voidengineNextBytes(byte[] bytes, SecureRandomParameters params)使用附加参数生成用户指定的随机字节数。protected voidengineReseed(SecureRandomParameters params)使用附加参数从熵源读取熵输入来重新获得该随机对象。protected abstract voidengineSetSeed(byte[] seed)用给定的种子重新设定这个随机对象。StringtoString()返回此SecureRandom的人类可读字符串表示SecureRandom。
-
-
-
构造方法详细信息
-
SecureRandomSpi
public SecureRandomSpi()
没有参数的构造函数。
-
SecureRandomSpi
protected SecureRandomSpi(SecureRandomParameters params)
具有参数的构造方法- 参数
-
params-SecureRandomParameters对象。 这个参数可以是null。 - 异常
-
IllegalArgumentException- 如果params无法识别或不支持此SecureRandom - 从以下版本开始:
- 9
-
-
方法详细信息
-
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- 如果params是null,非法或不支持此SecureRandom - 从以下版本开始:
- 9
-
engineGenerateSeed
protected abstract byte[] engineGenerateSeed(int numBytes)
返回给定的种子字节数。 该呼叫可以用于种子其他随机数发生器。- 参数
-
numBytes- 要生成的种子字节数。 - 结果
- 种子字节。
-
engineReseed
protected void engineReseed(SecureRandomParameters params)
- 实现要求:
-
默认实现会抛出一个
UnsupportedOperationException。 - 参数
-
params- 额外的参数,可以是null。 - 异常
-
UnsupportedOperationException- 如果实现没有覆盖此方法 -
IllegalArgumentException- 如果params是非法的或不支持此SecureRandom - 从以下版本开始:
- 9
-
engineGetParameters
protected SecureRandomParameters engineGetParameters()
返回此SecureRandom实例的有效SecureRandomParameters。- 实现要求:
-
默认实现返回
null。 - 结果
-
有效的
SecureRandomParameters参数,如果没有使用参数,null。 - 从以下版本开始:
- 9
-
-