I'm exploring some of Java's Cryptography Extension. I'm trying to create a function that lets me calculate a hash of some string (for storing passwords in a database, for example). Using various sources (forums.java.sun.com, google, etc.) I ended up with this. It seems to work ok, but I'd like someone else look over my code to see if I missed something.
I wrapped the code in a small application for your compiling/execution comfort.Code:/** * Testing java message digesting. * * This class should be compiled using JDK 1.5 or higher */ import java.security.*; class MessageDigestingTest { /* Supported Message Digest Algorithms in JDK.5, afaik: * * MD2 * MD5 * SHA-1 * SHA-256 * SHA-384 * SHA-512 */ private static final String ALGORITHM = "SHA-512"; private static final char HEXCHAR[] = { '0','1','2','3','4','5','6','7', '8','9','a','b','c','d','e','f'}; public static void main(String[] args) { if (args.length < 1) { System.out.println("Usage: MessageDigestingTest toBeDigestedString"); } else { System.out.println("Digesting using " + ALGORITHM + ": " + args[0]); System.out.println(digest(ALGORITHM, args[0])); } } private static String digest(String algorithm, String message) { /* StringBuilder is new in JDK1.5. It's a faster, but thread-unsafe, version of StringBuffer. */ StringBuilder hexString = new StringBuilder(); try { byte[] pwdBytes = message.getBytes(); MessageDigest md = MessageDigest.getInstance(algorithm); md.update(pwdBytes); byte[] mesgdig = md.digest(); for (int i=0; i<mesgdig.length; i++) { int c = ((int) mesgdig[i]) & 0xff; hexString.append(HEXCHAR[c >> 4 & 0xf]); hexString.append(HEXCHAR[c & 0xf]); } } catch (NoSuchAlgorithmException nsae) { System.err.printf("\nError while hashing password for logging.\nMessage: %s\n", nsae.getMessage()); } return hexString.toString(); } }


Reply With Quote
Bookmarks