找不到PostgreSQL加密函数

hmae6n7t  于 2022-11-22  发布在  PostgreSQL
关注(0)|答案(4)|浏览(486)

我是PostgreSQL的新手。我读过教程。我可以成功地SELECTINSERTDELETEUPDATE数据(我知道这只是一个基本部分)。
我现在的问题是加密数据。我现在搜索教程,但我没有找到我的问题的答案。我尝试在“执行任意SQL”(编辑:在PgAdmin-III中?其他工具?)。

INSERT INTO "admin" ("email_address", "password", "role_type", "status") 
VALUES ('encrypt(''sdf'', digest(''secret2'', ''sha256''), ''aes'') ', 'sd', 'admin', 'Active')

但我得到的结果是

ERROR: function encrypt(unknown, unknown) does not exist

如何获得此功能?
到目前为止,正如我所读到的,他们只展示了如何使用它的代码。

4c8rllxm

4c8rllxm1#

您引用的encrypt函数可能是来自the bundled pgcrypto extensionencrypt(bytea, bytea, text)
有关使用方法的详细信息,请参阅上面链接的文档。
加载扩展:

CREATE EXTENSION pgcrypto;

作为超级用户。
实际上,有用的加密并不像调用一个encrypt函数那么简单。(如果是话,为什么要加密数据)?攻击者是否会 Package 或替换encrypt函数来窃取密钥?他们是否会启用查询日志记录并从服务器日志中窃取密钥?触发导致记录语句的错误,并从错误消息中窃取密钥等。
正确的加密技术并不仅仅是在代码中加入一些加密的秘密酱料。你需要分析你想防御的可能的攻击者,你 * 不 * 想尝试防御的攻击者,以及他们的能力。然后根据攻击者的假设能力和你愿意承担的成本/不便/停机时间/风险来建立合适的系统。

eiee3dmh

eiee3dmh2#

这些函数是外部模块pgcrypto的一部分,您必须在要使用这些函数的数据库上启用它。
安装postgresql后,运行以下命令:

psql -d <database> -f /usr/share/postgresql/<version>/contrib/pgcrypto.sql

其中<database>是您正在使用的数据库的名称,<version>是您已安装的postgresql版本。

k75qkfdt

k75qkfdt3#

试试看:

SELECT encode(encrypt('content to be encrypted', 'your_secret_key', 'aes-cbc/pad:pkcs')::bytea, 'base64');
SELECT decrypt(decode('NG0AHMsly1L7tJas/tXmOQb/Ju0iYBOrpBmR5lXmHrA=', 'base64'), 'your_secret_key', 'aes-cbc/pad:pkcs');

如果要使用查询进行加密,则必须按如下方式转换列:

SELECT encode(encrypt(t.content::bytea, 'your_secret_key', 'aes-cbc/pad:pkcs')::bytea, 'base64')
from your_table t;
vktxenjb

vktxenjb4#

由接受的答案提供的命令可以在不对查询或数据类型进行任何更改的情况下修复问题:

CREATE EXTENSION pgcrypto;

但是,需要知道的是,在连接到您希望使用pgcrypto的数据库时,您需要创建扩展。要连接到您的数据库,请在psql中(以超级用户身份):

\connect <databasename>

然后使用CREATE EXTENSION pgcrypto创建扩展密码;**命令。

相关问题