# Class KeyStore.PasswordProtection

java.lang.Object
java.security.KeyStore.PasswordProtection

All Implemented Interfaces:
  `KeyStore.ProtectionParameter, Destroyable`

Enclosing class:
  `KeyStore`

public static class KeyStore.PasswordProtection extends Object implements KeyStore.ProtectionParameter, Destroyable
A password-based implementation of `ProtectionParameter`.

Since:
  1.5

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `PasswordProtection(char[] password)`
  Creates a password parameter.
  `PasswordProtection(char[] password, String protectionAlgorithm, AlgorithmParameterSpec protectionParameters)`
  Creates a password parameter and specifies the protection algorithm and associated parameters to use when encrypting a keystore entry.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `destroy()`
  Clears the password.
  `char[]`
  `getPassword()`
  Gets the password.
  `String`
  `getProtectionAlgorithm()`
  Gets the name of the protection algorithm.
  `AlgorithmParameterSpec`
  `getProtectionParameters()`
  Gets the parameters supplied for the protection algorithm.
  `boolean`
  `isDestroyed()`
  Determines if password has been cleared.

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `boolean`
  `equals(Object obj)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `int`
  `hashCode()`
  Returns a hash code value for this object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `String`
  `toString()`
  Returns a string representation of the object.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

- ## Constructor Details

  - ### PasswordProtection

    public PasswordProtection(char[] password)
    Creates a password parameter.

    The specified `password` is cloned before it is stored in the new `PasswordProtection` object.

    Parameters:
      `password` - the password, which may be `null`

  - ### PasswordProtection

    public PasswordProtection(char[] password, String protectionAlgorithm, AlgorithmParameterSpec protectionParameters)
    Creates a password parameter and specifies the protection algorithm and associated parameters to use when encrypting a keystore entry.

    The specified `password` is cloned before it is stored in the new `PasswordProtection` object.

    Parameters:
      `password` - the password, which may be `null`
      `protectionAlgorithm` - the encryption algorithm name, for example, `PBEWithHmacSHA256AndAES_256`. See the Cipher section in the Java Security Standard Algorithm Names Specification for information about standard encryption algorithm names.
      `protectionParameters` - the encryption algorithm parameter specification, which may be `null`
    Throws:
      `NullPointerException` - if `protectionAlgorithm` is `null`
    Since:
      1.8
    External Specifications
      - Java Security Standard Algorithm Names

- ## Method Details

  - ### getProtectionAlgorithm

    public String getProtectionAlgorithm()
    Gets the name of the protection algorithm. If none was set then the keystore provider will use its default protection algorithm.
    Returns:
      the algorithm name, or `null` if none was set
    Since:
      1.8

  - ### getProtectionParameters

    public AlgorithmParameterSpec getProtectionParameters()
    Gets the parameters supplied for the protection algorithm.
    Returns:
      the algorithm parameter specification, or `null`, if none was set
    Since:
      1.8

  - ### getPassword

    public char[] getPassword()
    Gets the password.

    Note that this method returns a reference to the password. If a clone of the array is created it is the caller's responsibility to zero out the password information after it is no longer needed.

    Returns:
      the password, which may be `null`
    Throws:
      `IllegalStateException` - if the password has been cleared (destroyed)
    See Also:
      - `destroy()`

  - ### destroy

    public void destroy() throws DestroyFailedException
    Clears the password.
    Specified by:
      `destroy` in interface `Destroyable`
    Throws:
      `DestroyFailedException` - if this method was unable to clear the password

  - ### isDestroyed

    public boolean isDestroyed()
    Determines if password has been cleared.
    Specified by:
      `isDestroyed` in interface `Destroyable`
    Returns:
      `true` if the password has been cleared, `false` otherwise