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 DigestUtils.crypt() for a method that distinguishes between all the algorithms supported in the current glibc's crypt().

The 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
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private static final int[]
     
    private static final int[]
     
    private static final char[]
     
    private static final boolean[]
     
    private static final int[][]
     
    private static final int[][]
     
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    private static int[]
    body(int[] schedule, int eSwap0, int eSwap1)
     
    private static int
     
    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.
    private static int
    dEncrypt(int el, int r, int s, int e0, int e1, int[] sArr)
     
    private static int[]
    desSetKey(byte[] key)
     
    private static int
    fourBytesToInt(byte[] b, int offset)
     
    private static int
    hPermOp(int a, int n, int m)
     
    private static void
    intToFourBytes(int iValue, byte[] b, int offset)
     
    private static void
    permOp(int a, int b, int n, int m, int[] results)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • CON_SALT

      private static final int[] CON_SALT
    • COV2CHAR

      private static final int[] COV2CHAR
    • SALT_CHARS

      private static final char[] SALT_CHARS
    • SHIFT2

      private static final boolean[] SHIFT2
    • SKB

      private static final int[][] SKB
    • SPTRANS

      private static final int[][] SPTRANS
  • Constructor Details

    • UnixCrypt

      public UnixCrypt()
  • 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 ThreadLocalRandom; for more secure salts consider using SecureRandom to generate your own salts and calling crypt(byte[], String).

      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 ThreadLocalRandom; for more secure salts consider using SecureRandom to generate your own salts.
      Returns:
      a 13 character string starting with the salt string
      Throws:
      IllegalArgumentException - 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 ThreadLocalRandom; for more secure salts consider using SecureRandom to generate your own salts and calling crypt(String, String).

      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 ThreadLocalRandom; for more secure salts consider using SecureRandom to generate your own salts.
      Returns:
      a 13 character string starting with the salt string
      Throws:
      IllegalArgumentException - if the salt does not match the allowed pattern
    • body

      private static int[] body(int[] schedule, int eSwap0, int eSwap1)
    • byteToUnsigned

      private static int byteToUnsigned(byte b)
    • dEncrypt

      private static int dEncrypt(int el, int r, int s, int e0, int e1, int[] sArr)
    • desSetKey

      private static int[] desSetKey(byte[] key)
    • fourBytesToInt

      private static int fourBytesToInt(byte[] b, int offset)
    • hPermOp

      private static int hPermOp(int a, int n, int m)
    • intToFourBytes

      private static void intToFourBytes(int iValue, byte[] b, int offset)
    • permOp

      private static void permOp(int a, int b, int n, int m, int[] results)