Md5Crypt (Encode/Decode Utilities (Version 1.10))
Date: 2016-03-08

org.apache.commons.codec.digest

## Class Md5Crypt

- java.lang.Object
- - 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 1563226 2014-01-31 19:38:06Z ggregory $

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `(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

    Constructors
    Constructor and Description
    `Md5Crypt()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `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.
      Parameters:
        `keyBytes` - plaintext string to hash.
      Returns:
        the hash value
      Throws:
        `RuntimeException` - when a `NoSuchAlgorithmException` is caught. *

    - #### apr1Crypt

          public static String apr1Crypt(byte[] keyBytes,
                         String salt)

      See `apr1Crypt(String, String)` for details.
      Parameters:
        `keyBytes` - plaintext string to hash.
        `salt` - An APR1 salt.
      Returns:
        the hash value
      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.
      Parameters:
        `keyBytes` - plaintext string to hash.
      Returns:
        the hash value
      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 to hash.
        `salt` - salt string including the prefix and optionally garbage at the end. Will be generated randomly if null.
      Returns:
        the 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.

      Parameters:
        `keyBytes` - plaintext string to hash.
      Returns:
        the hash value
      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 to hash.
        `salt` - salt string including the prefix and optionally garbage at the end. Will be generated randomly if null.
      Returns:
        the 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.

      Parameters:
        `keyBytes` - plaintext string to hash.
        `salt` - May be null.
        `prefix` - salt prefix
      Returns:
        the hash value
      Throws:
        `IllegalArgumentException` - if the salt does not match the allowed pattern
        `RuntimeException` - when a `NoSuchAlgorithmException` is caught.

commons-codec version 1.10 - Copyright © 2002-2016 - Apache Software Foundation