summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/util/Hash.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/util/Hash.java')
-rw-r--r--src/main/java/org/openslx/imagemaster/util/Hash.java100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/main/java/org/openslx/imagemaster/util/Hash.java b/src/main/java/org/openslx/imagemaster/util/Hash.java
new file mode 100644
index 0000000..8ac0e5f
--- /dev/null
+++ b/src/main/java/org/openslx/imagemaster/util/Hash.java
@@ -0,0 +1,100 @@
+package org.openslx.imagemaster.util;
+
+import java.security.MessageDigest;
+import java.nio.charset.Charset;
+import java.security.NoSuchAlgorithmException;
+
+public class Hash
+{
+ // Cache of md5 digesters
+ private static final ThreadLocal<MessageDigest> md5hash = new ThreadLocal<MessageDigest>() {
+ @Override
+ public MessageDigest initialValue()
+ {
+ try {
+ return MessageDigest.getInstance( "MD5" );
+ } catch ( NoSuchAlgorithmException e ) {
+ e.printStackTrace();
+ System.exit(1);
+ return null;
+ }
+ }
+ };
+ // Cache of sha256 digesters
+ private static final ThreadLocal<MessageDigest> sha256hash = new ThreadLocal<MessageDigest>() {
+ @Override
+ public MessageDigest initialValue()
+ {
+ try {
+ return MessageDigest.getInstance( "SHA-256" );
+ } catch ( NoSuchAlgorithmException e ) {
+ e.printStackTrace();
+ System.exit(1);
+ return null;
+ }
+ }
+ };
+ // Cache of sha512 digesters
+ private static final ThreadLocal<MessageDigest> sha512hash = new ThreadLocal<MessageDigest>() {
+ @Override
+ public MessageDigest initialValue()
+ {
+ try {
+ return MessageDigest.getInstance( "SHA-512" );
+ } catch ( NoSuchAlgorithmException e ) {
+ e.printStackTrace();
+ System.exit(1);
+ return null;
+ }
+ }
+ };
+ // For converting to hex string
+ private static final char[] HEX_CHARS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+ // Constant
+ private static final Charset UTF8 = Charset.forName( "UTF-8" );
+
+ // MD5
+
+ public static String md5( final byte[] bytes )
+ {
+ return toHexString( md5hash.get().digest( bytes ) );
+ }
+
+ public static String md5( final String text )
+ {
+ return md5( text.getBytes( UTF8 ));
+ }
+
+ // SHA-256
+
+ public static String sha256( final byte[] bytes )
+ {
+ return toHexString( sha256hash.get().digest( bytes ) );
+ }
+
+ public static String sha256( final String text )
+ {
+ return sha256( text.getBytes( UTF8 ));
+ }
+
+ // SHA-512
+
+ public static MessageDigest getSha512Digest()
+ {
+ return sha512hash.get();
+ }
+
+ // Helper
+
+ private static String toHexString( final byte[] bytes )
+ {
+ final char[] hexChars = new char[bytes.length * 2];
+ for ( int j = 0; j < bytes.length; ++j ) {
+ final int v = bytes[j] & 0xFF;
+ hexChars[j * 2] = HEX_CHARS[v >>> 4];
+ hexChars[j * 2 + 1] = HEX_CHARS[v & 0x0F];
+ }
+ return new String( hexChars );
+ }
+
+}