diff options
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/util/Sha512Crypt.java')
| -rw-r--r-- | src/main/java/org/openslx/imagemaster/util/Sha512Crypt.java | 47 |
1 files changed, 31 insertions, 16 deletions
diff --git a/src/main/java/org/openslx/imagemaster/util/Sha512Crypt.java b/src/main/java/org/openslx/imagemaster/util/Sha512Crypt.java index 472ead9..15cf9ac 100644 --- a/src/main/java/org/openslx/imagemaster/util/Sha512Crypt.java +++ b/src/main/java/org/openslx/imagemaster/util/Sha512Crypt.java @@ -44,6 +44,7 @@ package org.openslx.imagemaster.util; import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; /*------------------------------------------------------------------------------ class @@ -87,18 +88,33 @@ public final class Sha512Crypt static private final int ROUNDS_MAX = 999999999; static private final String SALTCHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; static private final String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - - static private MessageDigest getSHA512() - { - try - { - return MessageDigest.getInstance("SHA-512"); - } - catch (java.security.NoSuchAlgorithmException ex) - { - throw new RuntimeException(ex); - } - } + + /** + * Cache of sha512 digesters + */ + private static final ThreadLocal<MessageDigest> + sha1 = newThreadLocalSha512(), + sha2 = newThreadLocalSha512(); + + /** + * For instantiating TL sha512, so we don't have to copy this stuff twice + * @return thread local sha512 digester + */ + private static ThreadLocal<MessageDigest> newThreadLocalSha512() { + return new ThreadLocal<MessageDigest>() { + @Override + public MessageDigest initialValue() + { + try { + return MessageDigest.getInstance( "SHA-512" ); + } catch ( NoSuchAlgorithmException e ) { + e.printStackTrace(); + System.exit(1); + return null; + } + } + }; + } /** * <p>This method actually generates an Sha512 crypted password hash @@ -120,8 +136,8 @@ public final class Sha512Crypt public static final String Sha512_crypt(String keyStr, String saltStr, int roundsCount) { - MessageDigest ctx = getSHA512(); - MessageDigest alt_ctx = getSHA512(); + MessageDigest ctx = sha1.get(); + MessageDigest alt_ctx = sha2.get(); byte[] alt_result; byte[] temp_result; @@ -172,12 +188,11 @@ public final class Sha512Crypt } else { - java.util.Random randgen = new java.util.Random(); StringBuilder saltBuf = new StringBuilder(); while (saltBuf.length() < 16) { - int index = (int) (randgen.nextFloat() * SALTCHARS.length()); + int index = Util.randomInt(SALTCHARS.length()); saltBuf.append(SALTCHARS.substring(index, index+1)); } |
