我正在考虑对系统进行简单的密码升级,目前这个系统有类似的内容:
md5(md5($pass) . $user);
密码将在发送之前通过JavaScript哈希算法,这总是使三个字符的密码大约20多个字符。
我认为使用哈希密码的末尾作为KEY和IV加密其余应该就足够了。
$pass = '20_plus_characters_long';
$hash = openssl_encrypt(substr($pass, 5, -5), 'aes-128-cbc', substr($pass, 0, 5), false, md5(substr($pass, -5), true));
我说错了吗?
答案 0 :(得分:0)
您的计划存在一些缺点。实际上你加密密码并扔掉钥匙。
md5(md5($pass) . $user)
计划,这也太快了。实际上,使用password_hash()功能的标准方式没有优势。此函数将生成BCrypt哈希值,并且成本因子确定计算所需的时间以阻止暴力攻击。
答案 1 :(得分:0)
此密码加密是否足够安全?
可能不是,但这取决于您的威胁模型。
具有相同密码的两个用户在密码数据库中具有相同的条目。这是PRP安全性(伪随机排列)的损失。也就是说,攻击者将能够将随机答案与真实答案区分开来。
md5(md5($pass) . $user);
你应该看看Openwall的Portable PHP password hashing framework (phpass)和John Steven的Secure Password Storage。史蒂文甚至带你通过威胁模型并解释你为什么做事。