diff options
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/util/Hash.java')
-rw-r--r-- | src/main/java/org/openslx/imagemaster/util/Hash.java | 100 |
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 ); + } + +} |