1 21 22 package org.opensubsystems.core.util; 23 24 import java.security.MessageDigest ; 25 import java.security.NoSuchAlgorithmException ; 26 import java.security.NoSuchProviderException ; 27 import java.security.Security ; 28 import java.util.Properties ; 29 import java.util.logging.Logger ; 30 31 import org.bouncycastle.jce.provider.BouncyCastleProvider; 32 import org.opensubsystems.core.error.OSSException; 33 import org.opensubsystems.core.error.OSSInternalErrorException; 34 35 43 public final class PasswordUtils 44 { 45 47 54 public static final String PASSWORD_DIGEST_ALGORITHM = "oss.messagedigest.algorithm"; 55 56 60 public static final String PASSWORD_ALGORITHM_PROVIDER = "oss.messagedigest.provider"; 61 62 64 68 public static final String PASSWORD_DIGEST_ALGORITHM_DEFAULT = "SHA-1"; 69 70 74 public static final String PASSWORD_ALGORITHM_PROVIDER_DEFAULT = "BC"; 75 76 78 81 private static Logger s_logger = Log.getInstance(PasswordUtils.class); 82 83 88 protected static String s_strPasswordAlgorithm; 89 90 93 protected static String s_strPasswordAlgorithmProvider; 94 95 97 100 static 101 { 102 Security.addProvider(new BouncyCastleProvider()); 105 106 Properties prpSettings; 108 String strParam; 109 110 prpSettings = Config.getInstance().getPropertiesSafely(); 111 112 strParam = prpSettings.getProperty(PASSWORD_DIGEST_ALGORITHM, 115 PASSWORD_DIGEST_ALGORITHM); 116 if ((strParam.length() == 0) || (strParam.equals(PASSWORD_DIGEST_ALGORITHM))) 117 { 118 s_logger.config("Password digest algorithm is not set in property " 119 + PASSWORD_DIGEST_ALGORITHM + ", using default value " 120 + PASSWORD_DIGEST_ALGORITHM_DEFAULT); 121 s_strPasswordAlgorithm = PASSWORD_DIGEST_ALGORITHM_DEFAULT; 122 } 123 strParam = prpSettings.getProperty(PASSWORD_ALGORITHM_PROVIDER, 124 PASSWORD_ALGORITHM_PROVIDER); 125 if ((strParam.equals(PASSWORD_ALGORITHM_PROVIDER))) 127 { 128 s_logger.config("Password digest algorithm provider is not set in property " 129 + PASSWORD_ALGORITHM_PROVIDER + ", using default value " 130 + PASSWORD_ALGORITHM_PROVIDER_DEFAULT); 131 s_strPasswordAlgorithmProvider = PASSWORD_ALGORITHM_PROVIDER_DEFAULT; 132 } 133 134 try 136 { 137 if ((s_strPasswordAlgorithmProvider != null) 138 && (s_strPasswordAlgorithmProvider.length() > 0)) 139 { 140 MessageDigest.getInstance(s_strPasswordAlgorithm, 141 s_strPasswordAlgorithmProvider); 142 } 143 else 144 { 145 MessageDigest.getInstance(s_strPasswordAlgorithm); 146 } 147 } 148 catch (NoSuchAlgorithmException algExc) 149 { 150 assert (!PASSWORD_DIGEST_ALGORITHM_DEFAULT.equals(s_strPasswordAlgorithm)) 151 || (!PASSWORD_ALGORITHM_PROVIDER_DEFAULT.equals(s_strPasswordAlgorithmProvider)) 152 : "Default algorithm provided by default provider has to be always found."; 153 154 s_logger.config("Algorithm " + s_strPasswordAlgorithm + " set in property " 155 + PASSWORD_DIGEST_ALGORITHM + " provided by provider " 156 + s_strPasswordAlgorithmProvider + " set in property " 157 + PASSWORD_ALGORITHM_PROVIDER + " doesn't exist, using" 158 + " default values " + PASSWORD_DIGEST_ALGORITHM_DEFAULT 159 + " and " + PASSWORD_ALGORITHM_PROVIDER_DEFAULT); 160 s_strPasswordAlgorithm = PASSWORD_DIGEST_ALGORITHM_DEFAULT; 161 s_strPasswordAlgorithmProvider = PASSWORD_ALGORITHM_PROVIDER_DEFAULT; 162 } 163 catch (NoSuchProviderException provExc) 164 { 165 assert (!PASSWORD_DIGEST_ALGORITHM_DEFAULT.equals(s_strPasswordAlgorithm)) 166 || (!PASSWORD_ALGORITHM_PROVIDER_DEFAULT.equals(s_strPasswordAlgorithmProvider)) 167 : "Default algorithm provided by default provider has to be always found."; 168 169 s_logger.config("Algorithm " + s_strPasswordAlgorithm + " set in property " 170 + PASSWORD_DIGEST_ALGORITHM + " provided by provider " 171 + s_strPasswordAlgorithmProvider + " set in property " 172 + PASSWORD_ALGORITHM_PROVIDER + " doesn't exist, using" 173 + " default values " + PASSWORD_DIGEST_ALGORITHM_DEFAULT 174 + " and " + PASSWORD_ALGORITHM_PROVIDER_DEFAULT); 175 s_strPasswordAlgorithm = PASSWORD_DIGEST_ALGORITHM_DEFAULT; 176 s_strPasswordAlgorithmProvider = PASSWORD_ALGORITHM_PROVIDER_DEFAULT; 177 } 178 s_logger.config(PASSWORD_DIGEST_ALGORITHM + " = " + s_strPasswordAlgorithm); 179 s_logger.config(PASSWORD_ALGORITHM_PROVIDER + " = " + s_strPasswordAlgorithmProvider); 180 } 181 182 185 private PasswordUtils( 186 ) 187 { 188 } 190 191 193 200 public static String getMessageDigest( 201 String strData 202 ) throws OSSException 203 { 204 byte[] plainText; 205 MessageDigest messageDigest; 206 207 try 208 { 209 if ((s_strPasswordAlgorithmProvider != null) 210 && (s_strPasswordAlgorithmProvider.length() > 0)) 211 { 212 messageDigest = MessageDigest.getInstance(s_strPasswordAlgorithm, 213 s_strPasswordAlgorithmProvider); 214 } 215 else 216 { 217 messageDigest = MessageDigest.getInstance(s_strPasswordAlgorithm); 218 } 219 } 220 catch (NoSuchAlgorithmException algExc) 221 { 222 throw new OSSInternalErrorException( 223 "Cannot construct algorithm already verified in static constructor.", 224 algExc); 225 } 226 catch (NoSuchProviderException provExc) 227 { 228 throw new OSSInternalErrorException( 229 "Cannot construct algorithm already verified in static constructor.", 230 provExc); 231 } 232 233 plainText = strData.getBytes(); 235 messageDigest.update(plainText); 236 237 byte[] arrBytes = messageDigest.digest(); 239 StringBuffer strFinal = new StringBuffer (); 240 for (int iCount = 0; iCount < arrBytes.length; iCount++) 241 { 242 strFinal.append(Integer.toHexString( 248 (int) arrBytes[iCount] + (int) (-1 * Byte.MIN_VALUE))); 249 } 250 return strFinal.toString(); 251 } 252 } 253 | Popular Tags |