Java 如何使用AES方法解密加密列?

Java 如何使用AES方法解密加密列?,java,postgresql,hibernate,security,encryption,Java,Postgresql,Hibernate,Security,Encryption,因此,我有两个表,一个是带有id的患者id的患者表,另一个是带有列患者的医疗文件,患者id用AES方法加密(不是外键)。我对ORM使用Hibernate,在MedicalFile实体中,我使用AES加密来加密setter方法setPatient中的patient和getter方法getPatient中的解密来解密从数据库获取的值。守则: @Entity @Table(name = "patient", schema = "public") public class Patient extends

因此,我有两个表,一个是带有id的
患者id的
患者
表,另一个是带有列
患者
医疗文件
患者id
用AES方法加密(不是外键)。我对ORM使用Hibernate,在MedicalFile实体中,我使用AES加密来加密setter方法
setPatient
中的
patient
和getter方法
getPatient
中的解密来解密从数据库获取的值。守则:

@Entity
@Table(name = "patient", schema = "public")
public class Patient extends BaseEntity{
    @Id
    @GeneratedValue(generator  = "UUID")
    @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
    @Column(name = "id", updatable = false, nullable = false)
    private UUID id;
//....
}

@Entity
@Table(name = "medical_file", schema = "public")
public class MedicalFile extends BaseEntity {

    @Column(name = "patient")
    private String patient;
//...

    public void setPatient(String patient) {
        AES256TextEncryptor textEncryptor = new AES256TextEncryptor();
        textEncryptor.setPassword("key");
        this.patient = textEncryptor.encrypt(patient);
    }

    public String getPatient() {
        AES256TextEncryptor textEncryptor = new AES256TextEncryptor();
        textEncryptor.setPassword("key");
        return textEncryptor.decrypt(patient);
    }
}
因此,当我想保存
medical_文件
表时,我必须加密
patient
列,当我想获取患者的
medical_文件
时,我必须解密“medical_file”表中的
patient

使用相同密钥的
患者
的AES加密每次都不同,因此当我拥有
患者id
时(与
医疗文件
表中的
患者
相同,但未加密)我想加密以从
medical\u文件
表中获取
患者
,我得到了一个
medical\u文件
表中不存在的不同值


有什么解决这个问题的建议吗?

如果我理解正确,你想做的是-

您正在将AES加密数据存储在表中,然后希望 再次基于加密数据检索它,但问题是 每个AES加密都会生成不同的值,而您不会 可能介意DB中的匹配

我建议将更多列的MD5散列与其他AES加密数据放在一起。MD5是不可逆的,但每次都会为相同的输入生成相同的值(这是存储密码的常用方法)。因此,下一次当您想要搜索时,您已经创建了您输入的MD5哈希,从DB中找到它,然后使用AES解密对其余数据进行解密


让我知道这是否有用。如果我没有正确地解决您的问题,请忽略我的ans。

您已经解决了问题,并且它可以工作,但这不是我想要的。如果有人访问了数据库,他可以加密患者表中的患者id,以从医疗文件表中获取数据。我的目的是解密这两个表之间的关系。是的,你是对的,任何人都可以创建
MD5哈希表
,并从医疗文件表访问数据,如果他知道患者id的话,尽管你可以用salt做
MD5哈希表
(这是你代码的个人内容)并将生成一个值,任何其他访问
medical_文件
表的攻击者都无法使用salt生成.MD5-如果您关心存储在数据库中的敏感数据,为什么不加密整个数据库或磁盘?