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