使用 JASYPT + Hibernate + Spring 进行字符串加密
String Encryption with JASYPT + Hibernate + Spring
我成功地将我的 Spring Hibernate 后端与 Jasypt 集成。
根据以下实体 class 我已经加密了它的 name 字段,由于加密过程现在发生数据库学生 table 的姓名列包含加密数据。
我需要知道,
1) 当我编写一些 DAO 查询以通过他的名字搜索某个学生时,我是否必须将 搜索文本 作为纯文本传递或者我也必须加密该值?
2) 使用 DAO 查询时,当我列出所有学生的姓名排序时,它假设根据数据库级别的加密值或解密(真实)值进行排序(这意味着 Jasypt 会为我解密这些值)?
谢谢。
实体class
@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 class
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")));
}
But encryption sets a limitation on your Hibernate usage: security standards establish that two different encryption operations on the same data should not return the same value (due to the use of a random salt). Because of this, none of the fields that are set to be encrypted when persisted can be a part of a WHERE clause in your search queries for the entity they belong to.
这不允许搜索学生姓名。这是意料之中的,因为 Jasypt 不执行 homomorphic encryption(即允许某些操作的加密)。同态加密还处于起步阶段,大多数实现不能直接部署到现场。
加密搜索查询无效,因为加密不确定。 IE。即使您加密了搜索查询,您仍然会因为随机盐而得到不同的值。
一般来说,我不会将诸如学生姓名之类的基本信息标记为机密信息。如果确实需要加密,您最好加密整个数据库。
我成功地将我的 Spring Hibernate 后端与 Jasypt 集成。 根据以下实体 class 我已经加密了它的 name 字段,由于加密过程现在发生数据库学生 table 的姓名列包含加密数据。
我需要知道,
1) 当我编写一些 DAO 查询以通过他的名字搜索某个学生时,我是否必须将 搜索文本 作为纯文本传递或者我也必须加密该值?
2) 使用 DAO 查询时,当我列出所有学生的姓名排序时,它假设根据数据库级别的加密值或解密(真实)值进行排序(这意味着 Jasypt 会为我解密这些值)?
谢谢。
实体class
@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 class
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")));
}
But encryption sets a limitation on your Hibernate usage: security standards establish that two different encryption operations on the same data should not return the same value (due to the use of a random salt). Because of this, none of the fields that are set to be encrypted when persisted can be a part of a WHERE clause in your search queries for the entity they belong to.
这不允许搜索学生姓名。这是意料之中的,因为 Jasypt 不执行 homomorphic encryption(即允许某些操作的加密)。同态加密还处于起步阶段,大多数实现不能直接部署到现场。
加密搜索查询无效,因为加密不确定。 IE。即使您加密了搜索查询,您仍然会因为随机盐而得到不同的值。
一般来说,我不会将诸如学生姓名之类的基本信息标记为机密信息。如果确实需要加密,您最好加密整个数据库。