使用 PostgreSQL 摘要函数尝试检查密码时出错
Error using PostgreSQL digest function trying to check password
我正在使用 PostgreSQL 9.5 并试图理解如何在 pgcrypto 模块中使用摘要和 crypt 函数存储密码。
我有一个 table 这样的:
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'));
我在使用 crypt()
的示例之后使用 sha256 算法阅读了此 post and the official documentation 的全局盐和摘要的想法
我的问题是,当我尝试将 pgAdmin 中的密码与以下查询进行比较时:
SELECT (usuarios.password = digest('somesalt' || 'mypass','sha256')) AS Match FROM usuarios;
我收到密码类型 (varchar) 和摘要类型 (bytea) 不匹配的错误。我一直在寻找解决方法或演员阵容如何,但找不到它,或者,也许无法理解我眼皮底下的情况。
有帮助吗?
您需要投射您的摘要,例如(注意摘要后的 ::varchar
):
SELECT (usuarios.password = digest('somesalt' || 'mypass','sha256')::varchar) AS Match FROM usuarios;
另请注意,sha256 对密码哈希处理来说并不是很好,PostgreSQL has better functions for password hashing. Also see this SO answer。
我正在使用 PostgreSQL 9.5 并试图理解如何在 pgcrypto 模块中使用摘要和 crypt 函数存储密码。 我有一个 table 这样的:
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'));
我在使用 crypt()
的示例之后使用 sha256 算法阅读了此 post and the official documentation 的全局盐和摘要的想法我的问题是,当我尝试将 pgAdmin 中的密码与以下查询进行比较时:
SELECT (usuarios.password = digest('somesalt' || 'mypass','sha256')) AS Match FROM usuarios;
我收到密码类型 (varchar) 和摘要类型 (bytea) 不匹配的错误。我一直在寻找解决方法或演员阵容如何,但找不到它,或者,也许无法理解我眼皮底下的情况。 有帮助吗?
您需要投射您的摘要,例如(注意摘要后的 ::varchar
):
SELECT (usuarios.password = digest('somesalt' || 'mypass','sha256')::varchar) AS Match FROM usuarios;
另请注意,sha256 对密码哈希处理来说并不是很好,PostgreSQL has better functions for password hashing. Also see this SO answer。