Class SecureRandom
- All Implemented Interfaces:
Serializable
public class SecureRandom extends Random
SecureRandom using the default constructor.
This will provide an instance of the most cryptographically strong
provider available:
SecureRandom sr = new SecureRandom(); byte[] output = new byte[16]; sr.nextBytes(output);
The default algorithm is defined by the first SecureRandomSpi
provider found in the installed security providers. Use Security
to install custom SecureRandomSpi providers.
Note that the output of a SecureRandom instance should never
be relied upon to be deterministic. For deterministic output from a given
input, see MessageDigest which provides one-way hash functions.
For deriving keys from passwords, see
SecretKeyFactory.
Seeding SecureRandom may be
insecure
A seed is an array of bytes used to bootstrap random number generation.
To produce cryptographically secure random numbers, both the seed and the
algorithm must be secure.
By default, instances of this class will generate an initial seed using
an internal entropy source, such as /dev/urandom. This seed is
unpredictable and appropriate for secure use.
Using the seeded constructor or calling
setSeed(byte[]) may completely replace the cryptographically strong
default seed causing the instance to return a predictable sequence of
numbers unfit for secure use. Due to variations between implementations
it is not recommended to use setSeed at all.
- See Also:
- Serialized Form
-
Constructor Summary
Constructors Modifier Constructor Description SecureRandom()Constructs a newSecureRandomthat uses the default algorithm.SecureRandom(byte[] seed)Constructs a new seededSecureRandomthat uses the default algorithm.protectedSecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)Constructs a new instance ofSecureRandomusing the given implementation from the specified provider. -
Method Summary
Modifier and Type Method Description byte[]generateSeed(int numBytes)Generates and returns the specified number of seed bytes, computed using the seed generation algorithm used by thisSecureRandom.StringgetAlgorithm()Returns the name of the algorithm of thisSecureRandom.static SecureRandomgetInstance(String algorithm)Returns a new instance ofSecureRandomthat utilizes the specified algorithm.static SecureRandomgetInstance(String algorithm, String provider)Returns a new instance ofSecureRandomthat utilizes the specified algorithm from the specified provider.static SecureRandomgetInstance(String algorithm, Provider provider)Returns a new instance ofSecureRandomthat utilizes the specified algorithm from the specified provider.ProvidergetProvider()Returns the provider associated with thisSecureRandom.static byte[]getSeed(int numBytes)Generates and returns the specified number of seed bytes, computed using the seed generation algorithm used by thisSecureRandom.protected intnext(int numBits)Generates and returns anintcontaining the specified number of random bits (right justified, with leading zeros).voidnextBytes(byte[] bytes)Generates and stores random bytes in the givenbyte[]for each array element.voidsetSeed(byte[] seed)Seeds thisSecureRandominstance with the specifiedseed.voidsetSeed(long seed)Seeds thisSecureRandominstance with the specified eight-byteseed.Methods inherited from class java.util.Random
nextBoolean, nextDouble, nextFloat, nextGaussian, nextInt, nextInt, nextLong
-
Constructor Details
-
SecureRandom
public SecureRandom()Constructs a newSecureRandomthat uses the default algorithm. -
SecureRandom
public SecureRandom(byte[] seed)Constructs a new seededSecureRandomthat uses the default algorithm. SeedingSecureRandommay be insecure. -
SecureRandom
Constructs a new instance ofSecureRandomusing the given implementation from the specified provider.- Parameters:
secureRandomSpi- the implementation.provider- the security provider.
-
-
Method Details
-
getInstance
Returns a new instance ofSecureRandomthat utilizes the specified algorithm.- Parameters:
algorithm- the name of the algorithm to use.- Returns:
- a new instance of
SecureRandomthat utilizes the specified algorithm. - Throws:
NoSuchAlgorithmException- if the specified algorithm is not available.NullPointerException- ifalgorithmisnull.
-
getInstance
public static SecureRandom getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderExceptionReturns a new instance ofSecureRandomthat utilizes the specified algorithm from the specified provider.- Parameters:
algorithm- the name of the algorithm to use.provider- the name of the provider.- Returns:
- a new instance of
SecureRandomthat utilizes the specified algorithm from the specified provider. - Throws:
NoSuchAlgorithmException- if the specified algorithm is not available.NoSuchProviderException- if the specified provider is not available.NullPointerException- ifalgorithmisnull.IllegalArgumentException- ifprovider == null || provider.isEmpty()
-
getInstance
public static SecureRandom getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmExceptionReturns a new instance ofSecureRandomthat utilizes the specified algorithm from the specified provider.- Parameters:
algorithm- the name of the algorithm to use.provider- the security provider.- Returns:
- a new instance of
SecureRandomthat utilizes the specified algorithm from the specified provider. - Throws:
NoSuchAlgorithmException- if the specified algorithm is not available.NullPointerException- ifalgorithmisnull.IllegalArgumentException- ifprovider == null
-
getProvider
Returns the provider associated with thisSecureRandom.- Returns:
- the provider associated with this
SecureRandom.
-
getAlgorithm
Returns the name of the algorithm of thisSecureRandom.- Returns:
- the name of the algorithm of this
SecureRandom.
-
setSeed
public void setSeed(byte[] seed) -
setSeed
public void setSeed(long seed)Seeds thisSecureRandominstance with the specified eight-byteseed. SeedingSecureRandommay be insecure. -
nextBytes
public void nextBytes(byte[] bytes)Generates and stores random bytes in the givenbyte[]for each array element. -
next
protected final int next(int numBits)Generates and returns anintcontaining the specified number of random bits (right justified, with leading zeros). -
getSeed
public static byte[] getSeed(int numBytes)Generates and returns the specified number of seed bytes, computed using the seed generation algorithm used by thisSecureRandom.- Parameters:
numBytes- the number of seed bytes.- Returns:
- the seed bytes
-
generateSeed
public byte[] generateSeed(int numBytes)Generates and returns the specified number of seed bytes, computed using the seed generation algorithm used by thisSecureRandom.- Parameters:
numBytes- the number of seed bytes.- Returns:
- the seed bytes.
-