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 1429868 2013-01-07 16:08:05Z ggregory $

- - ### 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`

- - ### 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.

Copyright © 2002-2013 The Apache Software Foundation. All Rights Reserved.