# Class UnixCrypt

java.lang.Object
org.apache.commons.codec.digest.UnixCrypt

public class UnixCrypt extends Object
Unix crypt(3) algorithm implementation.

This class only implements the traditional 56 bit DES based algorithm. Please use Crypt.crypt() for a method that distinguishes between all the algorithms supported in the current glibc's crypt().

The initial Java implementation was taken from the JetSpeed Portal project (see org.apache.jetspeed.services.security.ldap.UnixCrypt).

This class is slightly incompatible if the given salt contains characters that are not part of the allowed range `[a-zA-Z0-9./]`.

This class is immutable and thread-safe.

Since:
  1.7

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `UnixCrypt()`
  Deprecated.
  TODO Make private in 2.0.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static String`
  `crypt(byte[] original)`
  Generates a crypt(3) compatible hash using the DES algorithm.
  `static String`
  `crypt(byte[] original, String salt)`
  Generates a crypt(3) compatible hash using the DES algorithm.
  `static String`
  `crypt(String original)`
  Generates a crypt(3) compatible hash using the DES algorithm.
  `static String`
  `crypt(String original, String salt)`
  Generates a crypt(3) compatible hash using the DES algorithm.

  ### Methods inherited from class Object

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

- ## Constructor Details

  - ### UnixCrypt

    @Deprecated public UnixCrypt()
    Deprecated.
    TODO Make private in 2.0.
    TODO Make private in 2.0.

- ## Method Details

  - ### crypt

    public static String crypt(byte[] original)
    Generates a crypt(3) compatible hash using the DES algorithm.

    A salt is generated for you using `SecureRandom`.

    Parameters:
      `original` - Plaintext password.
    Returns:
      A 13 character string starting with the salt string.

  - ### crypt

    public static String crypt(byte[] original, String salt)
    Generates a crypt(3) compatible hash using the DES algorithm.

    Using unspecified characters as salt results incompatible hash values.

    Parameters:
      `original` - Plaintext password.
      `salt` - a two character string drawn from [a-zA-Z0-9./]. The salt may be null, in which case a salt is generated for you using `B64.getRandomSalt(int)`. Only the first two characters are used, others are ignored.
    Returns:
      A 13 character string starting with the salt string.
    Throws:
      `IllegalArgumentException` - Thrown if the salt does not match the allowed pattern.

  - ### crypt

    public static String crypt(String original)
    Generates a crypt(3) compatible hash using the DES algorithm.

    A salt is generated for you using `SecureRandom`.

    Parameters:
      `original` - Plaintext password.
    Returns:
      A 13 character string starting with the salt string.

  - ### crypt

    public static String crypt(String original, String salt)
    Generates a crypt(3) compatible hash using the DES algorithm.
    Parameters:
      `original` - Plaintext password.
      `salt` - A two character string drawn from [a-zA-Z0-9./]. The salt may be null, in which case a salt is generated for you using `SecureRandom`.
    Returns:
      A 13 character string starting with the salt string.
    Throws:
      `IllegalArgumentException` - if the salt does not match the allowed pattern.