- 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()
没有参数的构造函数。protected
SecureRandomSpi(SecureRandomParameters params)
具有参数的构造方法
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 protected abstract byte[]
engineGenerateSeed(int numBytes)
返回给定的种子字节数。protected SecureRandomParameters
engineGetParameters()
返回此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)
用给定的种子重新设定这个随机对象。String
toString()
返回此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
-
-