我正在使用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)错误。我一直在四处寻找一种解决方法或演员是如何但却无法找到它,或者可能无法理解我的鼻子下面是什么。 有什么帮助吗?
答案 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。