org.apache.commons.codec.digest
Class Md5Crypt

java.lang.Object
  extended by org.apache.commons.codec.digest.Md5Crypt

public class Md5Crypt
extends Object

The libc crypt() "$1$" and Apache "$apr1$" MD5-based hash algorithm.

Based on the public domain ("beer-ware") C implementation from Poul-Henning Kamp which was found at: crypt-md5.c @ freebsd.org

Source:

 $FreeBSD: src/lib/libcrypt/crypt-md5.c,v 1.1 1999/01/21 13:50:09 brandon Exp $
 

Conversion to Kotlin and from there to Java in 2012.

The C style comments are from the original C code, the ones with "//" from the port.

This class is immutable and thread-safe.

Since:
1.7
Version:
$Id: Md5Crypt.java 1429868 2013-01-07 16:08:05Z ggregory $

Field Summary
(package private) static String APR1_PREFIX
          The Identifier of the Apache variant.
private static int BLOCKSIZE
          The number of bytes of the final hash.
(package private) static String MD5_PREFIX
          The Identifier of this crypt() variant.
private static int ROUNDS
          The number of rounds of the big loop.
 
Constructor Summary
Md5Crypt()
           
 
Method Summary
static String apr1Crypt(byte[] keyBytes)
          See apr1Crypt(String, String) for details.
static String apr1Crypt(byte[] keyBytes, String salt)
          See apr1Crypt(String, String) for details.
static String apr1Crypt(String keyBytes)
          See apr1Crypt(String, String) for details.
static String apr1Crypt(String keyBytes, String salt)
          Generates an Apache htpasswd compatible "$apr1$" MD5 based hash value.
static String md5Crypt(byte[] keyBytes)
          Generates a libc6 crypt() compatible "$1$" hash value.
static String md5Crypt(byte[] keyBytes, String salt)
          Generates a libc crypt() compatible "$1$" MD5 based hash value.
static String md5Crypt(byte[] keyBytes, String salt, String prefix)
          Generates a libc6 crypt() "$1$" or Apache htpasswd "$apr1$" hash value.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

APR1_PREFIX

static final String APR1_PREFIX
The Identifier of the Apache variant.

See Also:
Constant Field Values

BLOCKSIZE

private static final int BLOCKSIZE
The number of bytes of the final hash.

See Also:
Constant Field Values

MD5_PREFIX

static final String MD5_PREFIX
The Identifier of this crypt() variant.

See Also:
Constant Field Values

ROUNDS

private static final int ROUNDS
The number of rounds of the big loop.

See Also:
Constant Field Values
Constructor Detail

Md5Crypt

public Md5Crypt()
Method Detail

apr1Crypt

public static String apr1Crypt(byte[] keyBytes)
See apr1Crypt(String, String) for details.

Throws:
RuntimeException - when a NoSuchAlgorithmException is caught. *

apr1Crypt

public static String apr1Crypt(byte[] keyBytes,
                               String salt)
See apr1Crypt(String, String) for details.

Throws:
IllegalArgumentException - if the salt does not match the allowed pattern
RuntimeException - when a NoSuchAlgorithmException is caught.

apr1Crypt

public static String apr1Crypt(String keyBytes)
See apr1Crypt(String, String) for details.

Throws:
RuntimeException - when a NoSuchAlgorithmException is caught.

apr1Crypt

public static String apr1Crypt(String keyBytes,
                               String salt)
Generates an Apache htpasswd compatible "$apr1$" MD5 based hash value.

The algorithm is identical to the crypt(3) "$1$" one but produces different outputs due to the different salt prefix.

Parameters:
keyBytes - plaintext string that should be hashed.
salt - salt string including the prefix and optionally garbage at the end. Will be generated randomly if null.
Returns:
computed hash value
Throws:
IllegalArgumentException - if the salt does not match the allowed pattern
RuntimeException - when a NoSuchAlgorithmException is caught.

md5Crypt

public static String md5Crypt(byte[] keyBytes)
Generates a libc6 crypt() compatible "$1$" hash value.

See Crypt.crypt(String, String) for details.

Throws:
RuntimeException - when a NoSuchAlgorithmException is caught.

md5Crypt

public static String md5Crypt(byte[] keyBytes,
                              String salt)
Generates a libc crypt() compatible "$1$" MD5 based hash value.

See Crypt.crypt(String, String) for details.

Parameters:
keyBytes - plaintext string that should be hashed.
salt - salt string including the prefix and optionally garbage at the end. Will be generated randomly if null.
Returns:
computed hash value
Throws:
IllegalArgumentException - if the salt does not match the allowed pattern
RuntimeException - when a NoSuchAlgorithmException is caught.

md5Crypt

public static String md5Crypt(byte[] keyBytes,
                              String salt,
                              String prefix)
Generates a libc6 crypt() "$1$" or Apache htpasswd "$apr1$" hash value.

See Crypt.crypt(String, String) or apr1Crypt(String, String) for details.

Throws:
IllegalArgumentException - if the salt does not match the allowed pattern
RuntimeException - when a NoSuchAlgorithmException is caught.


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