SecureRandom
java.security
Class SecureRandom
Java.lang.Object
java.util.Random
java.security.SecureRandom
all implemented interfaces:Serializable
SecureRandom
Extends Random
This class provides a cryptographically strong random number generator (RNG). Many implementations are pseudo random number generators (PRNG), which means that they will use a determined algorithm to generate pseudo-random sequences based on actual random seeds. Other implementations can generate actual random numbers, while others may use these two techniques together.
The strong random number of encryption should at least comply with the statistical random number generator test specified in the 4.9.1 section of the FIPS 140-2, security Requirements for cryptographic Modules. In addition, securerandom must produce non-deterministic output, so, as described in the following article, the seed material must be unpredictable and the securerandom output must be a strong sequence of encryption: RFC 1750:randomness Recommendations for the security.
Like other algorithmic classes in Java security, SecureRandom also provides an implementation-independent algorithm, so the caller (application code) requests a particular RNG algorithm and passes it back to the SecureRandom object of the algorithm. If you want, you can also request a specific algorithm through a specific provider. See GetInstance method.
Therefore, there are two ways to request SecureRandom objects: Specify only the algorithm name, or specify both an algorithm name and a package provider. If you specify only the algorithm name, as follows:
SecureRandom random = securerandom.getinstance ("sha1prng");
The system will determine whether there is a request for the implementation of the algorithm, whether there are multiple, whether there is a preferred implementation.
If you specify both an algorithm name and a package provider, as follows:
SecureRandom random = securerandom.getinstance ("Sha1prng", "SUN");
The system determines whether an algorithm is implemented in the requested package, or throws an exception if it is not.
The SecureRandom implementation attempts to completely randomize the internal state of the generator itself, unless the caller calls the Setseed method after calling the GetInstance method:
SecureRandom random = securerandom.getinstance ("sha1prng");
Random.setseed (seed);
After the caller obtains the SecureRandom object from the getinstance call, it can invoke nextbytes to generate random bytes:
byte bytes[] = new BYTE[20];
Random.nextbytes (bytes);
Callers can also call the Generateseed method to generate the given number of seed bytes (for example, to provide seed for other random number generators):
byte seed[] = Random.generateseed (20);
See also: Securerandomspi, Random, serialization table
<!----> <!----> Construction Method Summary
|
SecureRandom () By using this construction method, the caller can obtain a SecureRandom object that contains the implementation from the highest priority installed provider with the SecureRandom implementation. |
|
SecureRandom (byte[] seed) By using this construction method, the caller can obtain a SecureRandom object that contains the implementation from the highest priority installed provider with the SecureRandom implementation. |
Protected |
SecureRandom (Securerandomspi Securerandomspi, Provider Provider) Creates a SecureRandom object. |
<!---->
<!----> Method Summary
Byte[] |
Generateseed (int numbytes) Returns the number of seed bytes given, which can be computed using the seed generation algorithm that this class uses to provide seed for itself. |
String |
Getalgorithm () Returns the name of the algorithm implemented by this SecureRandom object. |
Static SecureRandom |
getinstance (String algorithm) Generates a SecureRandom object that implements the specified random number generator (RNG) algorithm. |
Static SecureRandom |
getinstance (String algorithm, Provider Provider) If the provider is able to provide such a RNG implementation, the SecureRandom object is generated for the specified RNG algorithm provided by the specified provider. |
Static SecureRandom |
getinstance (String algorithm, string provider) If the provider is able to provide such a RNG implementation, the SecureRandom object is generated for the specified RNG algorithm provided by the specified provider. |
Provider |
Getprovider () Returns the provider for this SecureRandom object. |
Static byte[] |
Getseed (int numbytes) Returns the number of seed bytes given, which can be computed using the seed generation algorithm that this class uses to provide seed for itself. |
protected int |
Next (int numbits) Generates an integer containing the user-specified pseudo-random digits (right-aligned, with leading 0). |
void |
nextbytes (byte[] bytes) Generates a random number of bytes specified by the user. |
void |
Setseed (byte[] seed) Re-provide the seed for this random object. |
void |
Setseed (Long Seed) Provides a new seed for this random object using the eight bytes contained in the given long seed. |
<!----> methods of inheriting from class Java.util.Random
Nextboolean, Nextdouble, Nextfloat, Nextgaussian, Nextint, Nextint, Nextlong |
<!----> methods of inheriting from class Java.lang.Object
Clone, Equals, Finalize, GetClass, Hashcode, notify, Notifyall, toString, wait, wait, wait |