tags:

views:

1280

answers:

2
+2  Q: 

Java Compute SHA-1

I'm looking for a way of getting an SHA-1 checksum with a Java byte array as the message

Should I use a third party tool or is there something built in to the JVM that can help?

+9  A: 

What about:

import java.security.MessageDigest;

public static String SHAsum(byte[] convertme) {
    MessageDigest md = MessageDigest.getInstance("SHA-1"); 
    return String sum = new String(md.digest(convertme));
}
Pascal Thivent
Sad to see that a wrong answer is accepted and voted for so many times. The result of this method is first of all depending on the platform's default character encoding and will even return garbage if the default encoding is not able to transparently convert any bit sequence, which most actually aren't. new String(byte[]).getBytes() will for most encodings return a different byte array than what actually was passed to the String constructor. The MessageDigest part is correct however, but the hash must be encoded in a different way.
jarnbjo
I was only looking for way of computing the sha1 - the format doesn't matter
Mike
@jarnbjo You are right but the OP wasn't asking for that.
Pascal Thivent
+2  A: 

This a snippet of code we use to convert to SHA-1 but takes a String instead of a Byte[] see this javadoc for further info

        import java.io.UnsupportedEncodingException;
        import java.security.MessageDigest;
        import java.security.NoSuchAlgorithmException;

        public class DoSHA1 {

            private static String convToHex(byte[] data) {
                StringBuilder buf = new StringBuilder();
                for (int i = 0; i < data.length; i++) {
                    int halfbyte = (data[i] >>> 4) & 0x0F;
                    int two_halfs = 0;
                    do {
                        if ((0 <= halfbyte) && (halfbyte <= 9))
                            buf.append((char) ('0' + halfbyte));
                        else
                         buf.append((char) ('a' + (halfbyte - 10)));
                        halfbyte = data[i] & 0x0F;
                    } while(two_halfs++ < 1);
                }
                return buf.toString();
            }

            public static String SHA1(String text) throws NoSuchAlgorithmException,
UnsupportedEncodingException  {
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            byte[] sha1hash = new byte[40];
            md.update(text.getBytes("iso-8859-1"), 0, text.length());
            sha1hash = md.digest();
            return convToHex(sha1hash);
            }
        }
non sequitor