2014-02-11 5 views
0

Я добавил это в моем контексте файл приложениешифрование старых данные в базе данных

<!-- Added to encrypt user identification fields using jasypt --> 
    <bean id="stringEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor" lazy-init="false"> 
    <property name="algorithm" value="PBEWithMD5AndDES" /> 
    <property name="password" value="contactKey" /> 
    </bean> 

    <bean id="hibernateEncryptor" class="org.jasypt.hibernate.encryptor.HibernatePBEStringEncryptor" lazy-init="false"> 
    <!-- This property value must match "encryptorRegisteredName" used when defining hibernate user types --> 
    <property name="registeredName" value="jasyptHibernateEncryptor" /> 
    <property name="encryptor" ref="stringEncryptor" /> 
    </bean>` 

This below coded added in hibernate mapping file 
`<typedef name="encryptedString" class="org.jasypt.hibernate.type.EncryptedStringType"> 
     <param name="encryptorRegisteredName">jasyptHibernateEncryptor</param> 
    </typedef> 

Мы используем пружину с Hibernate в мою заявку, но мы хотим implenting jasyptHibernateEncryptorin в мою заявку.

Он отлично работает при записи новой записи в таблицу базы данных и получении одной записи, но проблема здесь заключается в ее шифровании моих старых данных.

ответ

1

вы создаете новое приложение, которое подключается к базе данных, извлекает все существующие строки и обновляет их один за другим после шифрования полей с помощью вашего шифрования. После этого обновления вы можете использовать новый typedef для обработки этих зашифрованных полей.

+0

Спасибо за ответ .. – user3296747

+0

Я хотел бы знать, какую технику шифрования я использую. что то же самое, что и метод шифрования jasypt/как получить старые данные, которые не зашифрованы – user3296747

1

Хорошо, чтобы разработать более:

  1. В настоящее время вы сопоставляются ваши объекты/классы в базу данных с proterties не шифруется, который выглядит примерно так:

    @Entity

    общественного класса Person {
    @Id
    @GeneratedValue (strategy = GenerationType.AUTO)
    private long id;
    частное название строки; }

Если вы планируете выключтель к зашифрованному типа (jasypt) необходимо сначала зашифровать все текущие значения в базе данных с кодом, который выглядит следующим образом:

public class Exec { 
    public static void main(String[] args) { 

     SessionFactory sf = HibernateUtil.getSessionFactory(true); 
     Session session = null; 
     try { 
      session = sf.openSession();   


      //configure the jasypt string encryptor - different type use different encryptors 
      StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); 
      encryptor.setAlgorithm("PBEWithMD5AndDES"); 
      encryptor.setPassword("123456"); 
      encryptor.setKeyObtentionIterations(1000);   
      encryptor.initialize(); 
//      get all unencrypted data from db and encrypt them - here just the name property of the Person is encrypted. 
      session.beginTransaction(); 
       List<Person> persons = session.createQuery("select p from Person p").list(); 
      for(Person pers : persons){ 
       pers.setName(encryptor.encrypt(pers.getName())); 
       session.save(pers);    
      } 

      session.getTransaction().commit(); 
     } catch (Exception ex) { 
      try { 
       ex.printStackTrace(); 
       session.getTransaction().rollback(); 
      } catch (Exception ex2) { 
       ex2.printStackTrace(); 
      } 
     } finally { 
      session.close(); 
      HibernateUtil.shutdown(); 
     } 

    } 
} 

После вы зашифрованы значения, нужно, переключите Person объект использовать зашифрованный тип так:

@org.hibernate.annotations.TypeDefs({ 
    @org.hibernate.annotations.TypeDef(name="EncryptedString", 
      typeClass=EncryptedStringType.class, 
      parameters={@Parameter(name="algorithm",value="PBEWithMD5AndDES"),@Parameter(name="password",value="123456"),@Parameter(name="keyObtentionIterations",value="1000")}) 
}) 
@Entity 
public class Person { 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private long id; 

    @Type(type="EncryptedString") 
    private String name; 

    public long getId() { 
     return id; 
    } 
// ... getters and setters 
} 

Убедитесь, что параметры прил ryptors одинаковы в определении и в коде: тот же алгоритм, тот же пароль, тот же самый параметр итерации ключа обрыва. После этого вы можете использовать объект Person как обычно, поскольку шифрование является прозрачным для используемого вами кода сохранения Java.

рабочий пример этого кода вы можете оформить из SVN с помощью этой команды:

SVN Checkout http://hibernate-jasypt-database-encryption.googlecode.com/svn/trunk/ зимуют-jasypt-база-шифрования только для чтения

Удачи!

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