Взгляните на Jasypt .Он уже сделал тяжелую работу для вас.В частности, классы org.jasypt.encryption.pbe.StandardPBEStringEncryptor
и org.jasypt.properties.PropertyValueEncryptionUtils
.
Создать шифратор:
SimplePBEConfig config = new SimplePBEConfig();
config.setAlgorithm("PBEWithMD5AndTripleDES");
config.setKeyObtentionIterations(1000);
config.setPassword("propertiesFilePassword");
StandardPBEStringEncryptor encryptor = new org.jasypt.encryption.pbe.StandardPBEStringEncryptor();
encryptor.setConfig(config);
encryptor.initialize();
Затем использовать PropertyValueEncryptionUtils
для шифрования / дешифрования значений:
PropertyValueEncryptionUtils.encrypt(value, encryptor);
PropertyValueEncryptionUtils.decrypt(encodedValue, encryptor)
Обратите внимание, что закодированное значение начинается с ENC(
и заканчивается )
, поэтому легко определить, зашифровано ли свойство из файла.
Кроме того, обратите внимание, что пароль, используемый для config.setPassword()
, является не пароль, который вы кодируете для хранения в файле свойств.Вместо этого это пароль для шифрования / дешифрования значение , которое вы храните.Что это за пароль и как его установить, решать только вам.Я по умолчанию использую полное имя класса для того, что читает файл свойств.
Наконец, если вы используете Spring, у Jasypt есть класс EncryptablePropertyPlaceholderConfigurer
, который вы можете использовать для загрузки файла свойств и использования ${foo}
синтаксис в файлах Spring XML для подстановки переменных для таких вещей, как пароли БД.