我正在使用crypt函数在DB中存储用户密码。 原始密码由他自己加密,用DB中的密码检查(我知道这不是一个好的做法,但目前的情况就是这样)。
问题在于:
crypt('qixin26428968123', 'qixin26428968123') === crypt('qixin26428968', 'qixin26428968')
所以看来,如果密码是123456并且用户尝试使用123456abcde登录,则登录将成功,这意味着用户可以随时选择密码登录系统“n”位是正确的。
这是一个已知问题吗?如何修复它,是否有为crypt函数指定的选项?
谢谢。
答案 0 :(得分:2)
来自manual
标准的基于DES的crypt()将salt作为前两个返回 输出的字符。它也只使用前八个字符 str,所以更长的字符串以相同的八个字符开头 将产生相同的结果(当使用相同的盐时)。
CRYPT_SHA512 使用16个字符