Implements the RandomData interface using a RandomGenerator
instance to generate non-secure data and a
SecureRandom instance to provide data for the
nextSecureXxx methods. If no RandomGenerator
is provided in the constructor, the default is to use a generator based on
Random . To plug in a different implementation,
either implement RandomGenerator directly or extend
AbstractRandomGenerator .
Supports reseeding the underlying pseudo-random number generator (PRNG).
The SecurityProvider and Algorithm
used by the SecureRandom instance can also be reset.
Instance variables are used to maintain RandomGenerator and
SecureRandom instances used in data generation. Therefore,
to generate a random sequence of values or strings, you should use just
oneRandomDataImpl instance repeatedly.
The "secure" methods are *much* slower. These should be used only when a
cryptographically secure random sequence is required. A secure random
sequence is a sequence of pseudo-random values which, in addition to being
well-dispersed (so no subsequence of values is an any more likely than other
subsequence of the the same length), also has the additional property that
knowledge of values generated up to any point in the sequence does not make
it any easier to predict subsequent values.
When a new RandomDataImpl is created, the underlying random
number generators are not intialized. If you do not
explicitly seed the default non-secure generator, it is seeded with the current time
in milliseconds on first use. The same holds for the secure generator.
If you provide a RandomGenerator to the constructor, however,
this generator is not reseeded by the constructor nor is it reseeded on
first use.
The reSeed and reSeedSecure methods delegate
to the corresponding methods on the underlying RandomGenerator
andSecureRandom instances. Therefore,
reSeed(long) fully resets the initial state of the non-secure
random number generator (so that reseeding with a specific value always
results in the same subsequent random sequence); whereas reSeedSecure(long)
does not reinitialize the secure random number generator
(so secure sequences started with calls to reseedSecure(long) won't be
identical).
nextSecureXxxmethods. If noRandomGeneratoris provided in the constructor, the default is to use a generator based on Random . To plug in a different implementation, either implementRandomGeneratordirectly or extend AbstractRandomGenerator .Supports reseeding the underlying pseudo-random number generator (PRNG). The
SecurityProviderandAlgorithmused by theSecureRandominstance can also be reset.For details on the default PRNGs, see Random and SecureRandom .
Usage Notes:
RandomGeneratorandSecureRandominstances used in data generation. Therefore, to generate a random sequence of values or strings, you should use just oneRandomDataImplinstance repeatedly.RandomDataImplis created, the underlying random number generators are not intialized. If you do not explicitly seed the default non-secure generator, it is seeded with the current time in milliseconds on first use. The same holds for the secure generator. If you provide aRandomGeneratorto the constructor, however, this generator is not reseeded by the constructor nor is it reseeded on first use.reSeedandreSeedSecuremethods delegate to the corresponding methods on the underlyingRandomGeneratorandSecureRandominstances. Therefore,reSeed(long)fully resets the initial state of the non-secure random number generator (so that reseeding with a specific value always results in the same subsequent random sequence); whereas reSeedSecure(long) does not reinitialize the secure random number generator (so secure sequences started with calls to reseedSecure(long) won't be identical).