Author: doogie
Date: Thu May 3 22:19:58 2012 New Revision: 1333661 URL: http://svn.apache.org/viewvc?rev=1333661&view=rev Log: OPTIMIZE: Add a getMessageDigest static helper function. Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/crypto/HashCrypt.java Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/crypto/HashCrypt.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/crypto/HashCrypt.java?rev=1333661&r1=1333660&r2=1333661&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/crypto/HashCrypt.java (original) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/crypto/HashCrypt.java Thu May 3 22:19:58 2012 @@ -42,56 +42,60 @@ public class HashCrypt { public static final String module = HashCrypt.class.getName(); public static final String CRYPT_CHAR_SET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./"; - public static boolean comparePassword(String crypted, String defaultCrypt, String password) { + public static MessageDigest getMessageDigest(String type) { try { - if (crypted.startsWith("{")) { - int typeEnd = crypted.indexOf("}"); - String hashType = crypted.substring(1, typeEnd); - String hashed = crypted.substring(typeEnd + 1); - MessageDigest messagedigest = MessageDigest.getInstance(hashType); - // FIXME: should have been getBytes("UTF-8") originally - messagedigest.update(password.getBytes()); - byte[] digestBytes = messagedigest.digest(); - char[] digestChars = Hex.encodeHex(digestBytes); - String checkCrypted = new String(digestChars); - if (hashed.equals(checkCrypted)) { - return true; - } - // This next block should be removed when all {prefix}oldFunnyHex are fixed. - int k = 0; - digestChars = new char[digestBytes.length * 2]; - for (int l = 0; l < digestBytes.length; l++) { - int i1 = digestBytes[l]; - - if (i1 < 0) { - i1 = 127 + i1 * -1; - } - StringUtil.encodeInt(i1, k, digestChars); - k += 2; - } - if (hashed.equals(new String(digestChars))) { - Debug.logWarning("Warning: detected oldFunnyHex password prefixed with a hashType; this is not valid, please update the value in the database with ({%s}%s)", module, hashType, checkCrypted); - return true; + return MessageDigest.getInstance(type); + } catch (NoSuchAlgorithmException e) { + throw new GeneralRuntimeException("Could not load digestor(" + type + ")", e); + } + } + + public static boolean comparePassword(String crypted, String defaultCrypt, String password) { + if (crypted.startsWith("{")) { + int typeEnd = crypted.indexOf("}"); + String hashType = crypted.substring(1, typeEnd); + String hashed = crypted.substring(typeEnd + 1); + MessageDigest messagedigest = getMessageDigest(hashType); + // FIXME: should have been getBytes("UTF-8") originally + messagedigest.update(password.getBytes()); + byte[] digestBytes = messagedigest.digest(); + char[] digestChars = Hex.encodeHex(digestBytes); + String checkCrypted = new String(digestChars); + if (hashed.equals(checkCrypted)) { + return true; + } + // This next block should be removed when all {prefix}oldFunnyHex are fixed. + int k = 0; + digestChars = new char[digestBytes.length * 2]; + for (int l = 0; l < digestBytes.length; l++) { + int i1 = digestBytes[l]; + + if (i1 < 0) { + i1 = 127 + i1 * -1; } - return false; - } else if (crypted.startsWith("$")) { - int typeEnd = crypted.indexOf("$", 1); - int saltEnd = crypted.indexOf("$", typeEnd + 1); - String hashType = crypted.substring(1, typeEnd); - String salt = crypted.substring(typeEnd + 1, saltEnd); - String hashed = crypted.substring(saltEnd + 1); - return hashed.equals(getCrypted(hashType, salt, password.getBytes(UTF8))); - } else { - String hashType = defaultCrypt; - String hashed = crypted; - MessageDigest messagedigest = MessageDigest.getInstance(hashType); - // FIXME: should have been getBytes("UTF-8") originally - messagedigest.update(password.getBytes()); - char[] digestChars = Hex.encodeHex(messagedigest.digest()); - return hashed.equals(new String(digestChars)); + StringUtil.encodeInt(i1, k, digestChars); + k += 2; } - } catch (NoSuchAlgorithmException e) { - throw new GeneralRuntimeException("Error while comparing password", e); + if (hashed.equals(new String(digestChars))) { + Debug.logWarning("Warning: detected oldFunnyHex password prefixed with a hashType; this is not valid, please update the value in the database with ({%s}%s)", module, hashType, checkCrypted); + return true; + } + return false; + } else if (crypted.startsWith("$")) { + int typeEnd = crypted.indexOf("$", 1); + int saltEnd = crypted.indexOf("$", typeEnd + 1); + String hashType = crypted.substring(1, typeEnd); + String salt = crypted.substring(typeEnd + 1, saltEnd); + String hashed = crypted.substring(saltEnd + 1); + return hashed.equals(getCrypted(hashType, salt, password.getBytes(UTF8))); + } else { + String hashType = defaultCrypt; + String hashed = crypted; + MessageDigest messagedigest = getMessageDigest(hashType); + // FIXME: should have been getBytes("UTF-8") originally + messagedigest.update(password.getBytes()); + char[] digestChars = Hex.encodeHex(messagedigest.digest()); + return hashed.equals(new String(digestChars)); } } |
Free forum by Nabble | Edit this page |