废话不多说,直接上干货,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数据库自带的加解密方法自动实现字段在数据库中的加密存储和解密读取。
注意点:
- pgp_sym_decrypt(PASSWORD::bytea中需要使用::bytea方法,因为根据postgre的官方文档:https://www.postgresql.org/docs/current/pgcrypto.html 加密后存储入数据库的数据为bytea格式,因为需要如此声明方能解密使用,另外PASSWORD 是数据库的字段名称,如果中间有_需要保持和数据库的一致。
- postgre数据库本身需要开启 pgcrypto功能,因此可使用 CREATE EXTENSION pgcrypto 对数据库加密插件进行开启。
- 我上文所示例的 'mySecretKey’明文salt,对于生产环境,一般需改为在postgresql.conf中配置salt:
- @ColumnTransformer(
read = “pgp_sym_decrypt(” +
" PASSWORD::bytea, " +
" current_setting(‘encrypt.key’)" +
“)”,
write = “pgp_sym_encrypt( " +
" ?, " +
" current_setting(‘encrypt.key’)” +
") "
)
。
Mysql也有类似的自动加解密存储功能,感兴趣的朋友可以自行网上搜索。