org.apache.commons.codec.digest
Class UnixCrypt

java.lang.Object
  extended by 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
Version:
$Id: UnixCrypt.java 1429868 2013-01-07 16:08:05Z ggregory $

Field Summary
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
UnixCrypt()
           
 
Method Summary
private static int[] body(int[] schedule, int eSwap0, int eSwap1)
           
private static int byteToUnsigned(byte b)
           
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 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 String crypt(byte[] original)
Generates a crypt(3) compatible hash using the DES algorithm.

As no salt is given, a random one will be used.

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./] or null for a random one
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.

As no salt is given, a random one is used.

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./] or null for a random one
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)


commons-codec version 1.8 - Copyright © 2002-2013 - Apache Software Foundation