java.security

Class SecureRandom

Implemented Interfaces:
Serializable

public class SecureRandom
extends Random

An interface to a cryptographically secure pseudo-random number generator (PRNG). Random (or at least unguessable) numbers are used in all areas of security and cryptography, from the generation of keys and initialization vectors to the generation of random padding bytes.
See Also:
Serialized Form

Constructor Summary

SecureRandom()
Default constructor for SecureRandom.
SecureRandom(byte[] seed)
A constructor for SecureRandom.
SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)
A constructor for SecureRandom.

Method Summary

byte[]
generateSeed(int numBytes)
Returns the specified number of seed bytes.
String
getAlgorithm()
Returns the algorithm name used or "unknown" when the algorithm used couldn't be determined (as when constructed by the protected 2 argument constructor).
static SecureRandom
getInstance(String algorithm)
Returns an instance of a SecureRandom from the first provider that implements it.
static SecureRandom
getInstance(String algorithm, String provider)
Returns an instance of a SecureRandom for the specified algorithm from the named provider.
static SecureRandom
getInstance(String algorithm, Provider provider)
Returns an instance of a SecureRandom for the specified algorithm from the given provider.
Provider
getProvider()
Returns the provider being used by the current SecureRandom class.
static byte[]
getSeed(int numBytes)
Returns the given number of seed bytes.
protected int
next(int numBits)
Generates an integer containing the user specified number of random bits.
void
nextBytes(byte[] bytes)
Generates a user specified number of bytes.
void
setSeed(byte[] seed)
Seeds the SecureRandom.
void
setSeed(long seed)
Seeds the SecureRandom.

Methods inherited from class java.util.Random

next, nextBoolean, nextBytes, nextDouble, nextFloat, nextGaussian, nextInt, nextInt, nextLong, setSeed

Methods inherited from class java.lang.Object

clone, equals, extends Object> getClass, finalize, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructor Details

SecureRandom

public SecureRandom()
Default constructor for SecureRandom. It constructs a new SecureRandom by instantating the first SecureRandom algorithm in the default security provier. It is not seeded and should be seeded using setSeed or else on the first call to getnextBytes it will force a seed. It is maintained for backwards compatibility and programs should use getInstance(String).

SecureRandom

public SecureRandom(byte[] seed)
A constructor for SecureRandom. It constructs a new SecureRandom by instantating the first SecureRandom algorithm in the default security provier. It is seeded with the passed function and is useful if the user has access to hardware random device (like a radiation detector). It is maintained for backwards compatibility and programs should use getInstance.
Parameters:
seed - Seed bytes for class

SecureRandom

protected SecureRandom(SecureRandomSpi secureRandomSpi,
                       Provider provider)
A constructor for SecureRandom. It constructs a new SecureRandom using the specified SecureRandomSpi from the specified security provier.
Parameters:
secureRandomSpi - A SecureRandomSpi class
provider - A Provider class

Method Details

generateSeed

public byte[] generateSeed(int numBytes)
Returns the specified number of seed bytes.
Parameters:
numBytes - number of seed bytes to get
Returns:
an array containing the seed bytes

getAlgorithm

public String getAlgorithm()
Returns the algorithm name used or "unknown" when the algorithm used couldn't be determined (as when constructed by the protected 2 argument constructor).
Since:
1.5

getInstance

public static SecureRandom getInstance(String algorithm)
            throws NoSuchAlgorithmException
Returns an instance of a SecureRandom from the first provider that implements it.
Parameters:
algorithm - The algorithm name.
Returns:
A new SecureRandom implementing the given algorithm.
Throws:
NoSuchAlgorithmException - If no installed provider implements the given algorithm.
IllegalArgumentException - if algorithm is null or is an empty string.

getInstance

public static SecureRandom getInstance(String algorithm,
                                       String provider)
            throws NoSuchAlgorithmException,
                   NoSuchProviderException
Returns an instance of a SecureRandom for the specified algorithm from the named provider.
Parameters:
algorithm - The algorithm name.
provider - The provider name.
Returns:
A new SecureRandom implementing the chosen algorithm.
Throws:
NoSuchAlgorithmException - If the named provider does not implement the algorithm, or if the implementation cannot be instantiated.
NoSuchProviderException - If no provider named provider is currently installed.
IllegalArgumentException - if either algorithm or provider is null or empty.

getInstance

public static SecureRandom getInstance(String algorithm,
                                       Provider provider)
            throws NoSuchAlgorithmException
Returns an instance of a SecureRandom for the specified algorithm from the given provider.
Parameters:
algorithm - The SecureRandom algorithm to create.
provider - The provider to use.
Throws:
NoSuchAlgorithmException - If the algorithm cannot be found, or if the class cannot be instantiated.
IllegalArgumentException - if either algorithm or provider is null, or if algorithm is an empty string.

getProvider

public final Provider getProvider()
Returns the provider being used by the current SecureRandom class.
Returns:
The provider from which this SecureRandom was attained

getSeed

public static byte[] getSeed(int numBytes)
Returns the given number of seed bytes. This method is maintained only for backwards capability.
Parameters:
numBytes - number of seed bytes to get
Returns:
an array containing the seed bytes

next

protected final int next(int numBits)
Generates an integer containing the user specified number of random bits. It is right justified and padded with zeros.
Overrides:
next in interface Random
Parameters:
numBits - number of random bits to get, 0 <= numBits <= 32;
Returns:
the random bits

nextBytes

public void nextBytes(byte[] bytes)
Generates a user specified number of bytes. This function is the basis for all the random functions.
Overrides:
nextBytes in interface Random
Parameters:
bytes - array to store generated bytes in

setSeed

public void setSeed(byte[] seed)
Seeds the SecureRandom. The class is re-seeded for each call and each seed builds on the previous seed so as not to weaken security.
Parameters:
seed - seed bytes to seed with

setSeed

public void setSeed(long seed)
Seeds the SecureRandom. The class is re-seeded for each call and each seed builds on the previous seed so as not to weaken security.
Overrides:
setSeed in interface Random
Parameters:
seed - 8 seed bytes to seed with

SecureRandom.java --- Secure Random class implementation Copyright (C) 1999, 2001, 2002, 2003, 2005, 2006 Free Software Foundation, Inc. This file is part of GNU Classpath. GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Classpath is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Classpath; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination. As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.