用pgcrypto加密整个列

问题描述

我需要使用AES-256密钥对某些列进行加密,我已经检查了pgcrypto的官方文档。但是他们的例子让我发疯。

例如,我的数据库如下所示。

     id       first_name      last_name       is_active

     0        John            last_name 1        True
     1        David           last_name 2        False
     2        vincent         last_name 3        True
     3        Dean            last_name 5        False

我尝试过这样的事情:

     UPDATE my_table SET first_name = ENCRYPT(user_name,'my_encryption_key')

我需要加密first_name和last_name列。我该如何实现?

谢谢, qwew

解决方法

pgp_sym_XXX()函数与armor()encode()一起使用以得到base-64:

update my_table
   set first_name = armor(
                      pgp_sym_encrypt(first_name,'your_key','cipher-algo=aes256')
                    ),last_name =  armor(
                      pgp_sym_encrypt(last_name,'cipher-algo=aes256')
                    );

AES-256速度很慢,因此可能需要很长时间才能对整个表运行。

要解密:

select pgp_sym_decrypt(dearmor(last_name),'cipher-algo=aes256')
  from my_table;