2015-02-13 5 views
1

Я успешно интегрировал свой Spring Hibernate с Jasypt. Согласно следующему классу сущности, я зашифровал его . Поле, из-за процесса шифрования, теперь столбец таблицы таблицы базы данных базы данных содержит зашифрованные данные.Штриховое шифрование с JASYPT + Hibernate + Spring

мне нужно знать,

1) Когда я пишу некоторые DAO запрос для поиска некоторых студентов по имени, имею ли я передать, что поиск текста в виде простого текста или я должен зашифровать это значение слишком ?

2) С запросом DAO, когда я перечисляю список всех учеников по их именам, он предполагает сортировать в соответствии с зашифрованными значениями уровня базы данных или дешифровать (реальные) значения (это означает, что Jasypt расшифрует эти значения для меня) ?

Спасибо.

Entity Класс

@Entity 
@Table(name = "student") 
public class Student implements Serializable { 

    @Id 
    @GeneratedValue 
    @Column(name = "ID") 
    private Integer id; 

    @Type(type="encryptedString") 
    @Column(name = "name") 
    private String name; 
} 

DAO класс

 public interface StudentRepository extends CrudRepository<Student, Integer> JpaSpecificationExecutor<Student> { 

     public List<Student> findByName(String searchText); 

     public List<Student> findAll(null, (new Sort(Direction.ASC, "name"))); 
    } 

ответ

1

От Jasypt page on Hibernate:

Но шифрования устанавливает ограничение на вашем использовании Hibernate: стандарты безопасности устанавливают, что две разные операции шифрования на одни и те же данные не должны возвращать одинаковое значение (из-за использования случайной соли). Из-за этого ни одно из полей, которые должны быть зашифрованы при сохранении, может быть частью предложения WHERE в ваших поисковых запросах для объекта, к которому они принадлежат,.

Это запрещает поиск имен студентов. Этого следует ожидать, поскольку Jasypt не выполняет homomorphic encryption (то есть шифрование, когда разрешены определенные операции). Гомоморфное шифрование все еще очень в зачаточном состоянии, и большинство реализаций не могут быть непосредственно развернуты в поле.

Шифрование поискового запроса не работает, поскольку шифрование не детерминировано. То есть даже если вы зашифруете поисковый запрос, вы все равно получите другое значение из-за случайной соли.

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