SecureRandomSpi (Java Platform SE 8 )
Keywords: java.security.SecureRandomSpi class
Date: 2026-03-29

compact1, compact2, compact3
java.security

## Class SecureRandomSpi

- java.lang.Object
- - java.security.SecureRandomSpi

- All Implemented Interfaces:
    Serializable

      public abstract class SecureRandomSpi
      extends Object
      implements Serializable

  This class defines the Service Provider Interface (SPI) for the `SecureRandom` class. All the abstract methods in this class must be implemented by each service provider who wishes to supply the implementation of a cryptographically strong pseudo-random number generator.
  Since:
    1.2
  See Also:
    `SecureRandom`, Serialized Form

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `SecureRandomSpi()`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected abstract byte[]` | `engineGenerateSeed(int numBytes)` Returns the given number of seed bytes.
    `protected abstract void` | `engineNextBytes(byte[] bytes)` Generates a user-specified number of random bytes.
    `protected abstract void` | `engineSetSeed(byte[] seed)` Reseeds this random object.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### SecureRandomSpi

          public SecureRandomSpi()

  - ### Method Detail

    - #### engineSetSeed

          protected abstract void engineSetSeed(byte[] seed)

      Reseeds this random object. The given seed supplements, rather than replaces, the existing seed. Thus, repeated calls are guaranteed never to reduce randomness.
      Parameters:
        `seed` - the seed.

    - #### engineNextBytes

          protected abstract void engineNextBytes(byte[] bytes)

      Generates a user-specified number of random bytes.

      If a call to `engineSetSeed` had not occurred previously, the first call to this method forces this SecureRandom implementation to seed itself. This self-seeding will not occur if `engineSetSeed` was previously called.

      Parameters:
        `bytes` - the array to be filled in with random bytes.

    - #### engineGenerateSeed

          protected abstract byte[] engineGenerateSeed(int numBytes)

      Returns the given number of seed bytes. This call may be used to seed other random number generators.
      Parameters:
        `numBytes` - the number of seed bytes to generate.
      Returns:
        the seed bytes.

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2026, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.