Simplify Digester utility class.
This commit is contained in:
parent
84902ebb50
commit
42e0e158b4
|
@ -22,12 +22,12 @@ import java.security.NoSuchProviderException;
|
||||||
/**
|
/**
|
||||||
* Helper for working with the MessageDigest API.
|
* Helper for working with the MessageDigest API.
|
||||||
*
|
*
|
||||||
* Performs 1024 iterations of the hashing algorithm per digest to aid in protecting against brute force attacks.
|
* Performs the configured number of iterations of the hashing algorithm per digest to aid in protecting against brute force attacks.
|
||||||
*
|
*
|
||||||
* @author Keith Donald
|
* @author Keith Donald
|
||||||
* @author Luke Taylor
|
* @author Luke Taylor
|
||||||
*/
|
*/
|
||||||
class Digester {
|
final class Digester {
|
||||||
|
|
||||||
private final MessageDigest messageDigest;
|
private final MessageDigest messageDigest;
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@ class Digester {
|
||||||
/**
|
/**
|
||||||
* Create a new Digester.
|
* Create a new Digester.
|
||||||
* @param algorithm the digest algorithm; for example, "SHA-1" or "SHA-256".
|
* @param algorithm the digest algorithm; for example, "SHA-1" or "SHA-256".
|
||||||
|
* @param iterations the number of times to apply the digest algorithm to the input
|
||||||
*/
|
*/
|
||||||
public Digester(String algorithm, int iterations) {
|
public Digester(String algorithm, int iterations) {
|
||||||
try {
|
try {
|
||||||
|
@ -49,16 +50,10 @@ class Digester {
|
||||||
|
|
||||||
public byte[] digest(byte[] value) {
|
public byte[] digest(byte[] value) {
|
||||||
synchronized (messageDigest) {
|
synchronized (messageDigest) {
|
||||||
for (int i = 0; i < (iterations - 1); i++) {
|
for (int i = 0; i < iterations; i++) {
|
||||||
value = invokeDigest(value);
|
value = messageDigest.digest(value);
|
||||||
}
|
}
|
||||||
return messageDigest.digest(value);
|
return value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte[] invokeDigest(byte[] value) {
|
|
||||||
messageDigest.reset();
|
|
||||||
return messageDigest.digest(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,11 +14,11 @@ import org.springframework.security.crypto.password.Digester;
|
||||||
public class DigesterTests {
|
public class DigesterTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void digestIsCorrectFor2Iterations() {
|
public void digestIsCorrectFor3Iterations() {
|
||||||
Digester digester = new Digester("SHA-1", 2);
|
Digester digester = new Digester("SHA-1", 3);
|
||||||
byte[] result = digester.digest(Utf8.encode("text"));
|
byte[] result = digester.digest(Utf8.encode("text"));
|
||||||
// echo -n text | openssl sha1 -binary | openssl sha1
|
// echo -n text | openssl sha1 -binary | openssl sha1 -binary | openssl sha1
|
||||||
assertEquals("cdcefc6a573f294e60e1d633bca3aeba450954a3", new String(Hex.encode(result)));
|
assertEquals("3cfa28da425eca5b894f0af2b158adf7001e000f", new String(Hex.encode(result)));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue