Class UnixCrypt


  • public class UnixCrypt
    extends java.lang.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 int[] CON_SALT  
      private static int[] COV2CHAR  
      private static char[] SALT_CHARS  
      private static boolean[] SHIFT2  
      private static int[][] SKB  
      private static int[][] SPTRANS  
    • Constructor Summary

      Constructors 
      Constructor Description
      UnixCrypt()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      private static int[] body​(int[] schedule, int eSwap0, int eSwap1)  
      private static int byteToUnsigned​(byte b)  
      static java.lang.String crypt​(byte[] original)
      Generates a crypt(3) compatible hash using the DES algorithm.
      static java.lang.String crypt​(byte[] original, java.lang.String salt)
      Generates a crypt(3) compatible hash using the DES algorithm.
      static java.lang.String crypt​(java.lang.String original)
      Generates a crypt(3) compatible hash using the DES algorithm.
      static java.lang.String crypt​(java.lang.String original, java.lang.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 Detail

      • 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 Detail

      • UnixCrypt

        public UnixCrypt()
    • Method Detail

      • crypt

        public static java.lang.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 java.lang.String crypt​(byte[] original,
                                             java.lang.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:
        java.lang.IllegalArgumentException - if the salt does not match the allowed pattern
      • crypt

        public static java.lang.String crypt​(java.lang.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 java.lang.String crypt​(java.lang.String original,
                                             java.lang.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:
        java.lang.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)