gpt4 book ai didi

java - 如何使用 Hibernate @ColumnTransformer 加密 Postgres 中的列

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:10:05 25 4
gpt4 key购买 nike

我正在尝试加密我的 prostrgres 数据库中的列。列名是“bytea”类型的“test”。

我的实体代码如下,

@ColumnTransformer(
forColumn="test",
read="pgp_sym_encrypt(test::bytea, 'mySecretKey')",
write="pgp_sym_decrypt(?, 'mySecretKey')")
private String test;

当我尝试检索实体时,我得到了如下所示的加密数据。如何以编程方式获取解密值?但是如果我执行 postgres 选择查询,我会得到实际值。

  "test": "\\xc30d04070302474627ea0994ea657bd24401aaa5543862d57524a407e5dbe2ee0f6f0f33ea4f4474f5bc801dca5d32956d41a975505b12ac000f124177bdc2f4507cbfd724d716aaa513ba46f004dfefd3b2b32eb6"
  1. 当我尝试保留实体时,出现以下错误。

ERROR: column "test" is of type bytea but expression is of type character varying

最佳答案

您需要使用 pgp_sym_encrypt 进行写入,使用 pgp_sym_decrypt 进行读取。你做了相反的事情。

@ColumnTransformer(
read = "pgp_sym_decrypt(" +
" test, " +
" current_setting('encrypt.key')" +
")",
write = "pgp_sym_encrypt( " +
" ?, " +
" current_setting('encrypt.key')" +
") "
)
@Column(columnDefinition = "bytea")
private String test;

因为在映射中硬编码加密 key 听起来不是一个好主意,我们将改用 PostgreSQL 对用户定义设置的支持。

因此,encrypt.key存储在postgresql.conf配置文件中:

encrypt.key = 'Wow! So much security.'

example is on GitHub就像一个魅力。

关于java - 如何使用 Hibernate @ColumnTransformer 加密 Postgres 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42437840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com