首页 > 解决方案 > 使用 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 列。我该如何实施?

谢谢,qww

标签: sqlpostgresqlencryptionpgcrypto

解决方案


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, 'your_key', 'cipher-algo=aes256')
                    );

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

解密:

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

推荐阅读