如何使用Pgcrypto和Python从Postgresql数据库中选择哈希值



我正在使用Postgresql中的pgcrypto扩展来加密和盐化数据库中用户密码的存储,但我在检索它们时遇到了问题。

具体来说,用户的insert语句如下所示:

INSERT INTO Users (username, password) VALUES ('test1', crypt('Password1234', gen_salt('bf', 8)));

然而,当我尝试从数据库中检索时,这个查询很好:

SELECT username, password FROM Users WHERE username = 'test1' AND password = crypt('Password1234', gen_salt('bf', 8));

不返回任何结果,查询不会失败,只是没有结果。

目前,我没有使用python与数据库交互(我将来会使用(,我只是在终端中使用psql。我知道这个查询有问题,但我不确定是什么以及如何修复它。是否有其他方法可以结构化它,或者我做错了什么?谢谢你的帮助!

您正在用新盐重新腌制密码,这当然会导致与以前不同的答案。这就是腌制的全部意义。

您需要在新的哈希中重用第一个salt,这是通过提供密码哈希来代替gen_salt(...)来实现的。(存储的散列密码中嵌入了salt,crypt知道如何提取和重用它(。

SELECT username, password FROM Users WHERE username = 'test1' AND password = crypt('Password1234', password);

但是,你为什么选择";密码";?一旦你验证了哈希是正确的,那么看到它还有什么用呢?

相关内容

  • 没有找到相关文章

最新更新