Не удается зашифровать пароль в файле конфигурации

У меня возникли проблемы с шифрованием пароля базы данных в 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: Ошибка входа для пользователя 'sa'. ClientConnectionId:8033573f-5f52-4fe9-a728-fbe4f57d89c4

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

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

registry.registerPBEStringEncryptor(
        "hibernateEncryptor", encryptor);

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

Я так шифрую

изображение проблемы jasypt

ОБНОВЛЕНИЕ

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

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")})

person nachokk    schedule 05.09.2013    source источник
comment
Можете ли вы указать версию Hibernate и версию Jasypt?   -  person Haim Raman    schedule 08.09.2013
comment
@Хаим hibernate-4.1 и jasypt 1.9.1 jasypt-hibernate4-1.91   -  person nachokk    schedule 09.09.2013


Ответы (3)


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

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>
person nachokk    schedule 09.09.2013

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

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());
person B Black    schedule 20.09.2013
comment
+1 На самом деле, это похоже на то, что я делаю, но вы используете подход к получению через xml свойства, чтобы вы могли изменить его без перестройки. HibernatePBEEncryptor не нужно, если вы делаете таким образом. - person nachokk; 20.09.2013

http://www.jasypt.org/hibernate.html

Почему бы не переключить алгоритмы на: PBEWithMD5AndTripleDES

Взгляните на этот пост в StackOverflow: Ошибка реализации Jasypt с Hibernate 3 и Struts 2

person Tim Spann    schedule 14.09.2013