summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/util/Sha512Crypt.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/util/Sha512Crypt.java')
-rw-r--r--src/main/java/org/openslx/imagemaster/util/Sha512Crypt.java47
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));
}