我注意到 postgres 使用"包含"而不是"等于"来比较加密文本。 要复制,请使用以下命令:
create table "user" (uname text, password chkpass);
insert into "user" values ('user1', 'password')
select * from "user" where uname = 'user1' and password = 'password1'
这是一个主要问题。
有没有人注意到这一点? 有人可以给我临时解决方案吗?
这不是错误。它只是加密内部使用的crypt((函数的限制。
我注意到 postgres 使用"包含"而不是"等于"来比较加密文本。
它没有使用"包含",而是检查正在比较的文本的前八个字符。正如在 chkpass 文档中提到的
加密使用标准的Unix函数crypt((,因此它受到该函数的所有常见限制;值得注意的是,只考虑密码的前八个字符。
我建议您使用其他算法来加密您的密码(如本文所述(,然后将其存储在数据库中,而不是使用 postgres chkpass。