pgp_sym_encrypt并解密postgresql中的整个列

时间:2014-10-30 15:21:06

标签: sql postgresql encryption pgcrypto

我想使用256加密来加密postgreSQL数据库中的area_code列。 这是发生了什么..我能够轻松加密它,但我无法解密它。

以下是可以正常使用的加密查询:

        update mytable t1 set area_code = t2.area_code from (select pgp_sym_encrypt(area_code,'Password', 'compress-algo=1, cipher-algo=aes256') as area_code,area_name from mytable) t2 where t1.area_name = t2.area_name;

然而,如果我给出像

这样的东西,解密查询似乎不起作用
            update mytable t1 set area_code = t2.area_code from (select pgp_sym_decrypt(area_code,'Password') as area_code,area_name from mytable) t2 where t1.area_name = t2.area_name;

甚至当我尝试查看解密的area_code

select pgp_sym_decrypt((select area_code from ci), 'Password') ;

唯一有效的方法是当我使用单个记录并直接输入加密文本作为输入时。

select pgp_sym_decrypt('aes.encrypted.string.given.as.input', 'Password') ;

有人可以给我一些关于如何解密表中整个列的输入!

谢谢:)

1 个答案:

答案 0 :(得分:3)

您应该将加密数据存储到bytea列,而不是文本列。您可以将其从文本转换为bytea:

pgp_sym_decrypt(area_code::bytea,'Password')

为什么不直接更新表,而不是在更新时进行简并自联接?