Class Md5Crypt
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
-
Field Summary
FieldsModifier and TypeFieldDescription(package private) static final String
The Identifier of the Apache variant.private static final int
The number of bytes of the final hash.(package private) static final String
The Identifier of this crypt() variant.private static final int
The number of rounds of the big loop. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic String
apr1Crypt
(byte[] keyBytes) Seeapr1Crypt(byte[], String)
for details.static String
Seeapr1Crypt(String, String)
for details.static String
Seeapr1Crypt(byte[], String)
for details.static String
Seeapr1Crypt(String, String)
for details.static String
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
Generates a libc crypt() compatible "$1$" MD5 based hash value.static String
Generates a libc6 crypt() "$1$" or Apache htpasswd "$apr1$" hash value.static String
Generates a libc6 crypt() "$1$" or Apache htpasswd "$apr1$" hash value.static String
Generates a libc6 crypt() compatible "$1$" hash value.
-
Field Details
-
APR1_PREFIX
The Identifier of the Apache variant.- See Also:
-
BLOCKSIZE
private static final int BLOCKSIZEThe number of bytes of the final hash.- See Also:
-
MD5_PREFIX
The Identifier of this crypt() variant.- See Also:
-
ROUNDS
private static final int ROUNDSThe number of rounds of the big loop.- See Also:
-
-
Constructor Details
-
Md5Crypt
public Md5Crypt()
-
-
Method Details
-
apr1Crypt
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:
IllegalArgumentException
- when aNoSuchAlgorithmException
is caught. *- See Also:
-
apr1Crypt
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:
IllegalArgumentException
- when aNoSuchAlgorithmException
is caught. *- Since:
- 1.12
- See Also:
-
apr1Crypt
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:
IllegalArgumentException
- if the salt does not match the allowed patternIllegalArgumentException
- when aNoSuchAlgorithmException
is caught.
-
apr1Crypt
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:
IllegalArgumentException
- when aNoSuchAlgorithmException
is caught.- See Also:
-
apr1Crypt
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:
IllegalArgumentException
- if the salt does not match the allowed patternIllegalArgumentException
- when aNoSuchAlgorithmException
is caught.
-
md5Crypt
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:
IllegalArgumentException
- when aNoSuchAlgorithmException
is caught.- See Also:
-
md5Crypt
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:
IllegalArgumentException
- when aNoSuchAlgorithmException
is caught.- Since:
- 1.12
- See Also:
-
md5Crypt
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:
IllegalArgumentException
- if the salt does not match the allowed patternIllegalArgumentException
- when aNoSuchAlgorithmException
is caught.
-
md5Crypt
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:
IllegalArgumentException
- if the salt does not match the allowed patternIllegalArgumentException
- when aNoSuchAlgorithmException
is caught.
-
md5Crypt
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:
IllegalArgumentException
- if the salt does not match the allowed patternIllegalArgumentException
- when aNoSuchAlgorithmException
is caught.- Since:
- 1.12
-