2013-09-05 3 views
4

У меня возникли проблемы шифруют пароль базы данных в hibernate.cfg.xmlне может зашифровать пароль в конфигурационном файле

Это мой файл свойств.

<!-- Database connection settings --> 
<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property> 
<property name="connection.url">jdbc:sqlserver://localhost:1433;databaseName=TEST;</property> 
<property name="connection.username">sa</property> 
<!-- Encryption --> 
<property name="connection.password">ENC(vMO/j5jfpaU2cUhPVoOk5Q==)</property> 
<property name="connection.provider_class">org.jasypt.hibernate4.connectionprovider.EncryptedPasswordDriverManagerConnectionProvider</property> 
<property name="connection.encryptor_registered_name">hibernateEncryptor</property> 

Тогда в HiberanteUtil.java я это

// Builds session factory. 
private static SessionFactory configureSessionFactory() 
    throws HibernateException { 

    Configuration configuration = new Configuration().configure(); 
    StandardPBEStringEncryptor encryptor = 
     new StandardPBEStringEncryptor(); 
    encryptor.setPassword("pass"); 

    HibernatePBEEncryptorRegistry registry = 
     HibernatePBEEncryptorRegistry.getInstance(); 

    registry.registerPBEStringEncryptor("hibernateEncryptor", encryptor); 

    ServiceRegistry serviceRegistry = new ServiceRegistryBuilder() 
     .applySettings(configuration.getProperties()).buildServiceRegistry(); 

    return configuration.buildSessionFactory(serviceRegistry); 
} 

Я создал зашифрованный пароль с encrypt.bat.

Тогда ошибка я имею

com.microsoft.sqlserver.jdbc.SQLServerException: Логин потерпело неудачу для потребителя 'са'. ClientConnectionId: 8033573f-5f52-4fe9-A728-fbe4f57d89c4

Если удалить эту часть

StandardPBEStringEncryptor encryptor = 
     new StandardPBEStringEncryptor(); 
encryptor.setPassword("someKey"); 
HibernatePBEEncryptorRegistry registry = 
     HibernatePBEEncryptorRegistry.getInstance(); 

registry.registerPBEStringEncryptor(
     "hibernateEncryptor", encryptor); 

У меня такая же ошибка, так что я думаю, что это не зарегистрирует, но я не знаю, как сделай это.

Это, как я шифровать

jasypt problem image

UPDATE

Единственное, что я могу сделано, чтобы получить его работы что-то вроде этого, но это не так, как я думаю.

StandardPBEStringEncryptor encryptor = 
       new StandardPBEStringEncryptor(); 
     encryptor.setPassword("somePass"); 
     encryptor.setAlgorithm("PBEWITHMD5ANDDES"); 
     String pass=encryptor.decrypt("HhpmA/XmJoLro8TYYu4YyA=="); 
     HibernatePBEEncryptorRegistry registry = 
       HibernatePBEEncryptorRegistry.getInstance(); 
     registry.registerPBEStringEncryptor(
       "hibernateEncryptor", encryptor); 

     Configuration configuration = new Configuration().configure() 
       .setProperty("hibernate.connection.encryptor_registered_name","hibernateEncryptor") 
       .setProperty("hibernate.connection.password",pass); 

Так я думаю, что проблема с "hibernateEncryptor", я думаю, что нужно зарегистрировать

<typedef name="encryptedString" class="org.jasypt.hibernate4.type.EncryptedStringType"> 
    <param name="encryptorRegisteredName">hibernateEncryptor</param> 
    <typedef> 

Но когда я положил его в hibernate.cfg.xml говорит недействительный отображение, поэтому я добавить его в класс с аннотациями но ничего не происходит, потому что я думаю, что это читается после подключения к базе данных, что я и хочу зашифровать. :(

@TypeDef(name="encryptedString",typeClass=org.jasypt.hibernate4.type.EncryptedStringType.class, 
     parameters= {@Parameter(name="encryptorRegisteredName",value="hibernateEncryptor")}) 
+0

Вы можете указать гибернации версию и Jasypt версию? –

+0

@Haim 'hibernate-4.1' и' jasypt 1.9.1'' jasypt-hibernate4-1.91' – nachokk

ответ

5

Это не правильный способ сделать это, но решает

StandardPBEStringEncryptor encryptor =new StandardPBEStringEncryptor(); 
encryptor.setPassword("somePass"); 
encryptor.setAlgorithm("PBEWITHMD5ANDDES"); 
Configuration configuration = new Configuration().configure(); 
String pass=encryptor.decrypt(configuration.getProperty("hibernate.connection.password")); 
configuration.setProperty("hibernate.connection.password",pass); 

И hibernate.cfg

<property name="connection.username">sa</property> 
    <property name="connection.password">Nzuyhu5PJJwsVH3mdw==</property> 
2

Вы можете попробовать это:

StandardPBEStringEncryptor strongEncryptor = new StandardPBEStringEncryptor(); 
strongEncryptor.setPassword("jasypt"); 
strongEncryptor.setAlgorithm("PBEWITHMD5ANDDES"); 
HibernatePBEEncryptorRegistry registry =       HibernatePBEEncryptorRegistry.getInstance(); 
registry.registerPBEStringEncryptor("strongHibernateStringEncryptor", strongEncryptor); 

Configuration configuration = new Configuration(); 
configuration.configure("hibernate.cfg.xml"); 
configuration.setProperty("hibernate.connection.password", strongEncryptor.decrypt(configuration.getProperty("hibernate.connection.password"))); 
ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder().applySettings(configuration.getProperties()); 
sessionFactory = configuration.buildSessionFactory(serviceRegistryBuilder.buildServiceRegistry()); 
+0

+1 На самом деле, это похоже на то, что я делаю, но вы принимаете подход к получению через xml свойства, чтобы вы могли изменить его без перестройки .. 'HibernatePBEEncryptor' не является необходимым, если вы это сделаете. – nachokk

Смежные вопросы