尝试检查密码时使用PostgreSQL摘要功能时出错

时间:2016-03-02 22:46:34

标签: postgresql sha256 digest

我正在使用PostgreSQL 9.5并尝试理解如何在pgcrypto模块中存储带有摘要和crypt函数的密码。 我有一张这样的桌子:

CREATE TABLE "usuarios" (
"id" integer NOT NULL ,
"password" varchar(120),
CONSTRAINT usuarios_pk PRIMARY KEY ("id")
);

我使用此查询成功保存了第一行:

INSERT INTO public.usuarios VALUES (DEFAULT,digest('somesalt' || 'mypass','sha256'));

我使用sha256算法阅读此post以及使用crypt()后面的官方documentation,了解了全球盐和摘要

我的问题是,当我尝试将pgAdmin中的密码与以下查询进行比较时:

SELECT (usuarios.password = digest('somesalt' || 'mypass','sha256')) AS Match FROM usuarios; 

我收到错误密码类型(varchar)和摘要类型(bytea)错误。我一直在四处寻找一种解决方法或演员是如何但却无法找到它,或者可能无法理解我的鼻子下面是什么。 有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

您需要投射您的摘要,例如(请注意摘要后的::varchar):

SELECT (usuarios.password = digest('somesalt' || 'mypass','sha256')::varchar) AS Match FROM usuarios;

另请注意, sha256并非适用于密码哈希PostgreSQL has better functions for password hashing。另请参阅this SO answer