【问题标题】:String Encryption with JASYPT + Hibernate + Spring使用 JASYPT + Hibernate + Spring 的字符串加密
【发布时间】:2015-02-13 03:09:09
【问题描述】:

我成功地将我的 Spring Hibernate 后端与 Jasypt 集成。 根据以下实体类,我已经加密了它的 name 字段,由于加密过程现在发生,数据库学生表的 name 列包含加密数据。

我需要知道,

1) 当我编写一些 DAO 查询以通过他的名字搜索某个学生时,我是否必须将该 搜索文本 作为纯文本传递,或者我也必须加密该值?

2) 使用 DAO 查询,当我列出所有学生按姓名排序时,它应该根据数据库级别的加密值或解密(真实)值进行排序(这意味着 Jasypt 将为我解密这些值)?

谢谢。

实体类

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

【问题讨论】:

    标签: java spring hibernate encryption jasypt


    【解决方案1】:

    来自Jasypt page on Hibernate

    加密对您的 Hibernate 使用设置了限制:安全标准规定,对同一数据进行两次不同的加密操作不应返回相同的值(由于使用了随机盐)。因此,设置为在持久化时加密的任何字段都不能成为它们所属实体的搜索查询中 WHERE 子句的一部分

    这不允许搜索学生姓名。这是意料之中的,因为 Jasypt 不执行homomorphic encryption(即允许某些操作的加密)。同态加密还处于非常初级的阶段,大多数实现不能直接在现场部署。

    加密搜索查询不起作用,因为加密不确定。 IE。即使您加密了搜索查询,由于随机盐,您仍然会得到不同的值。

    一般来说,我不会将学生姓名等基本信息标记为机密信息。如果确实需要加密,最好对整个数据库进行加密。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多