Class Md5Crypt
- java.lang.Object
-
- org.apache.commons.codec.digest.Md5Crypt
-
public class Md5Crypt extends java.lang.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
-
-
Constructor Summary
Constructors Constructor Description Md5Crypt()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static java.lang.String
apr1Crypt(byte[] keyBytes)
Seeapr1Crypt(byte[], String)
for details.static java.lang.String
apr1Crypt(byte[] keyBytes, java.lang.String salt)
Seeapr1Crypt(String, String)
for details.static java.lang.String
apr1Crypt(byte[] keyBytes, java.util.Random random)
Seeapr1Crypt(byte[], String)
for details.static java.lang.String
apr1Crypt(java.lang.String keyBytes)
Seeapr1Crypt(String, String)
for details.static java.lang.String
apr1Crypt(java.lang.String keyBytes, java.lang.String salt)
Generates an Apache htpasswd compatible "$apr1$" MD5 based hash value.static java.lang.String
md5Crypt(byte[] keyBytes)
Generates a libc6 crypt() compatible "$1$" hash value.static java.lang.String
md5Crypt(byte[] keyBytes, java.lang.String salt)
Generates a libc crypt() compatible "$1$" MD5 based hash value.static java.lang.String
md5Crypt(byte[] keyBytes, java.lang.String salt, java.lang.String prefix)
Generates a libc6 crypt() "$1$" or Apache htpasswd "$apr1$" hash value.static java.lang.String
md5Crypt(byte[] keyBytes, java.lang.String salt, java.lang.String prefix, java.util.Random random)
Generates a libc6 crypt() "$1$" or Apache htpasswd "$apr1$" hash value.static java.lang.String
md5Crypt(byte[] keyBytes, java.util.Random random)
Generates a libc6 crypt() compatible "$1$" hash value.
-
-
-
Method Detail
-
apr1Crypt
public static java.lang.String apr1Crypt(byte[] keyBytes)
Seeapr1Crypt(byte[], String)
for details.A salt is generated for you using
SecureRandom
; your ownRandom
inapr1Crypt(byte[], Random)
.- Parameters:
keyBytes
- plaintext string to hash.- Returns:
- the hash value
- Throws:
java.lang.IllegalArgumentException
- when aNoSuchAlgorithmException
is caught. *- See Also:
apr1Crypt(byte[], String)
-
apr1Crypt
public static java.lang.String apr1Crypt(byte[] keyBytes, java.util.Random random)
Seeapr1Crypt(byte[], String)
for details.A salt is generated for you using the user provided
Random
.- Parameters:
keyBytes
- plaintext string to hash.random
- the instance ofRandom
to use for generating the salt. Consider usingSecureRandom
orThreadLocalRandom
.- Returns:
- the hash value
- Throws:
java.lang.IllegalArgumentException
- when aNoSuchAlgorithmException
is caught. *- Since:
- 1.12
- See Also:
apr1Crypt(byte[], String)
-
apr1Crypt
public static java.lang.String apr1Crypt(byte[] keyBytes, java.lang.String salt)
Seeapr1Crypt(String, String)
for details.A salt is generated for you using
SecureRandom
- Parameters:
keyBytes
- plaintext string to hash.salt
- An APR1 salt. The salt may be null, in which case a salt is generated for you usingThreadLocalRandom
; for more secure salts consider usingSecureRandom
to generate your own salts.- Returns:
- the hash value
- Throws:
java.lang.IllegalArgumentException
- if the salt does not match the allowed patternjava.lang.IllegalArgumentException
- when aNoSuchAlgorithmException
is caught.
-
apr1Crypt
public static java.lang.String apr1Crypt(java.lang.String keyBytes)
Seeapr1Crypt(String, String)
for details.A salt is generated for you using
ThreadLocalRandom
; for more secure salts consider usingSecureRandom
to generate your own salts and callingapr1Crypt(byte[], String)
.- Parameters:
keyBytes
- plaintext string to hash.- Returns:
- the hash value
- Throws:
java.lang.IllegalArgumentException
- when aNoSuchAlgorithmException
is caught.- See Also:
apr1Crypt(byte[], String)
-
apr1Crypt
public static java.lang.String apr1Crypt(java.lang.String keyBytes, java.lang.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. The salt may be null, in which case a salt is generated for you usingThreadLocalRandom
; for more secure salts consider usingSecureRandom
to generate your own salts.- Returns:
- the hash value
- Throws:
java.lang.IllegalArgumentException
- if the salt does not match the allowed patternjava.lang.IllegalArgumentException
- when aNoSuchAlgorithmException
is caught.
-
md5Crypt
public static java.lang.String md5Crypt(byte[] keyBytes)
Generates a libc6 crypt() compatible "$1$" hash value.See
md5Crypt(byte[], String)
for details.A salt is generated for you using
ThreadLocalRandom
; for more secure salts consider usingSecureRandom
to generate your own salts and callingmd5Crypt(byte[], String)
.- Parameters:
keyBytes
- plaintext string to hash.- Returns:
- the hash value
- Throws:
java.lang.IllegalArgumentException
- when aNoSuchAlgorithmException
is caught.- See Also:
md5Crypt(byte[], String)
-
md5Crypt
public static java.lang.String md5Crypt(byte[] keyBytes, java.util.Random random)
Generates a libc6 crypt() compatible "$1$" hash value.See
md5Crypt(byte[], String)
for details.A salt is generated for you using the instance of
Random
you supply.- Parameters:
keyBytes
- plaintext string to hash.random
- the instance ofRandom
to use for generating the salt. Consider usingSecureRandom
orThreadLocalRandom
.- Returns:
- the hash value
- Throws:
java.lang.IllegalArgumentException
- when aNoSuchAlgorithmException
is caught.- Since:
- 1.12
- See Also:
md5Crypt(byte[], String)
-
md5Crypt
public static java.lang.String md5Crypt(byte[] keyBytes, java.lang.String salt)
Generates a libc crypt() compatible "$1$" MD5 based hash value.See
Crypt.crypt(String, String)
for details. We useSecureRandom
for seed generation by default.- Parameters:
keyBytes
- plaintext string to hash.salt
- salt string including the prefix and optionally garbage at the end. The salt may be null, in which case a salt is generated for you usingThreadLocalRandom
; for more secure salts consider usingSecureRandom
to generate your own salts.- Returns:
- the hash value
- Throws:
java.lang.IllegalArgumentException
- if the salt does not match the allowed patternjava.lang.IllegalArgumentException
- when aNoSuchAlgorithmException
is caught.
-
md5Crypt
public static java.lang.String md5Crypt(byte[] keyBytes, java.lang.String salt, java.lang.String prefix)
Generates a libc6 crypt() "$1$" or Apache htpasswd "$apr1$" hash value.See
Crypt.crypt(String, String)
orapr1Crypt(String, String)
for details. We useby default
.- Parameters:
keyBytes
- plaintext string to hash.salt
- real salt value without prefix or "rounds=". The salt may be null, in which case a salt is generated for you usingThreadLocalRandom
; for more secure salts consider usingSecureRandom
to generate your own salts.prefix
- salt prefix- Returns:
- the hash value
- Throws:
java.lang.IllegalArgumentException
- if the salt does not match the allowed patternjava.lang.IllegalArgumentException
- when aNoSuchAlgorithmException
is caught.
-
md5Crypt
public static java.lang.String md5Crypt(byte[] keyBytes, java.lang.String salt, java.lang.String prefix, java.util.Random random)
Generates a libc6 crypt() "$1$" or Apache htpasswd "$apr1$" hash value.See
Crypt.crypt(String, String)
orapr1Crypt(String, String)
for details.- Parameters:
keyBytes
- plaintext string to hash.salt
- real salt value without prefix or "rounds=". The salt may be null, in which case a salt is generated for you usingThreadLocalRandom
; for more secure salts consider usingSecureRandom
to generate your own salts.prefix
- salt prefixrandom
- the instance ofRandom
to use for generating the salt. Consider usingSecureRandom
orThreadLocalRandom
.- Returns:
- the hash value
- Throws:
java.lang.IllegalArgumentException
- if the salt does not match the allowed patternjava.lang.IllegalArgumentException
- when aNoSuchAlgorithmException
is caught.- Since:
- 1.12
-
-