JPA + PostgreSQL使用pgp_sym_decrypt实现自动数据加解密存储功能

废话不多说,直接上干货,show代码:

@ColumnTransformer(
read = “pgp_sym_decrypt(PASSWORD::bytea, ‘mySecretKey’)”,
write = “pgp_sym_encrypt(?, ‘mySecretKey’)”
)
@Column
private String password;
没错,就是直接在entity中使用@ColumnTransformer, 配合read = pgp_sym_decrypt和write pgp_sym_encrypt数据库自带的加解密方法自动实现字段在数据库中的加密存储和解密读取。

注意点:

  1. pgp_sym_decrypt(PASSWORD::bytea中需要使用::bytea方法,因为根据postgre的官方文档:https://www.postgresql.org/docs/current/pgcrypto.html 加密后存储入数据库的数据为bytea格式,因为需要如此声明方能解密使用,另外PASSWORD 是数据库的字段名称,如果中间有_需要保持和数据库的一致。
  2. postgre数据库本身需要开启 pgcrypto功能,因此可使用 CREATE EXTENSION pgcrypto 对数据库加密插件进行开启。
    Image
  3. 我上文所示例的 'mySecretKey’明文salt,对于生产环境,一般需改为在postgresql.conf中配置salt:
  4. @ColumnTransformer(
    read = “pgp_sym_decrypt(” +
    " PASSWORD::bytea, " +
    " current_setting(‘encrypt.key’)" +
    “)”,
    write = “pgp_sym_encrypt( " +
    " ?, " +
    " current_setting(‘encrypt.key’)” +
    ") "
    )
    image

Mysql也有类似的自动加解密存储功能,感兴趣的朋友可以自行网上搜索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值