【问题标题】:pgp_sym_encrypt and decrypt an entire column in postgresqlpgp_sym_encrypt 和解密 postgresql 中的整个列
【发布时间】:2014-10-30 15:21:06
【问题描述】:

我想在我的 postgreSQL 数据库中使用 aes 256 加密来加密 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') ;

【问题讨论】:

  • 这里是错误:错误:功能 pgp_sym_decrypt(字符变化,未知)不存在第 3 行:从(选择 pgp_sym_decrypt(area_code,'Password')作为 area_... ^ 提示:没有功能匹配给定的名称和参数类型。您可能需要添加显式类型转换。********** 错误 **********

标签: sql postgresql encryption pgcrypto


【解决方案1】:

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

pgp_sym_decrypt(area_code::bytea,'Password')

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2014-03-26
    相关资源
    最近更新 更多