通过截取某字符串散列结果的前n位字符来比较字符串正确性的做法是否妥当?
程序员文章站
2022-03-09 12:05:55
...
当我们存储用户密码的时候当然需要保存完整的散列结果,但有时候这个散列结果很长,在有些情况下显得很臃肿。比如我想写一个简单的cookie防伪造程序,思路是先将cookie原始值进行mcrypt可逆加密,再将值拼上salt计算sha256并截取sha256结果的前10位接在最终cookie值的后面。验证时只需要将cookie值拆开,解密前一段字符,并计算sha256取前10位与后面的值进行比较。这样的做法是否安全?
回复内容:
当我们存储用户密码的时候当然需要保存完整的散列结果,但有时候这个散列结果很长,在有些情况下显得很臃肿。比如我想写一个简单的cookie防伪造程序,思路是先将cookie原始值进行mcrypt可逆加密,再将值拼上salt计算sha256并截取sha256结果的前10位接在最终cookie值的后面。验证时只需要将cookie值拆开,解密前一段字符,并计算sha256取前10位与后面的值进行比较。这样的做法是否安全?
密码的hash值不应该放在cookie中,你可以另外生成token来验证登录。
这种做法还是很常见的, 16位的md5就是先计算出32位然后截取中间16位来实现的.当然,太短了要小心被暴力破解.
上一篇: php smarty模版操作符有哪些?操作符怎么使用?
下一篇: PHP如何比较字符串的大小?