【发布时间】:2017-07-15 05:43:12
【问题描述】:
我正在尝试加密我的 prostrgres 数据库中的列。列名是“bytea”类型的“test”。
我的实体代码如下,
@ColumnTransformer(
forColumn="test",
read="pgp_sym_encrypt(test::bytea, 'mySecretKey')",
write="pgp_sym_decrypt(?, 'mySecretKey')")
private String test;
当我尝试检索实体时,我得到了如下所示的加密数据。如何以编程方式获取解密的值?但如果我执行 postgres 选择查询,我会得到实际值。
"test": "\\xc30d04070302474627ea0994ea657bd24401aaa5543862d57524a407e5dbe2ee0f6f0f33ea4f4474f5bc801dca5d32956d41a975505b12ac000f124177bdc2f4507cbfd724d716aaa513ba46f004dfefd3b2b32eb6"
- 当我尝试持久化实体时,出现以下错误。
错误:列“test”的类型为 bytea,但表达式的类型为 性格不同
【问题讨论】:
-
我认为你的函数调用是相反的。你应该使用
read="pgp_sym_decrypt(test, '<key>')", write="pgp_sym_encrypt(?, '<key>')"之类的东西。 (因为它在数据库中被加密并且您希望在您的应用程序中解密)。 -
但我不确定这是否是嵌入密钥的正确位置。
标签: java postgresql hibernate encryption orm