为了允许用户连接到我的网站,我使用 BCrypt 加密他们的密码,因为它是最慢的解密算法之一(使受感染的数据库需要更长的解密时间)。
但我想知道这是否足够 - 或者将它与 sha256/512 之类的散列算法结合起来是否更好?
事实上,这意味着:
clear password -> sha256 -> bcrypt -> stored in database.
添加 sha256 是否真的增加了解密这些的难度,或者 BCrypt 的缓慢性是否足够?
为了允许用户连接到我的网站,我使用 BCrypt 加密他们的密码,因为它是最慢的解密算法之一(使受感染的数据库需要更长的解密时间)。
但我想知道这是否足够 - 或者将它与 sha256/512 之类的散列算法结合起来是否更好?
事实上,这意味着:
clear password -> sha256 -> bcrypt -> stored in database.
添加 sha256 是否真的增加了解密这些的难度,或者 BCrypt 的缓慢性是否足够?
简短的回答是,使用 bcrypt,而不是 SHA256。Bcrypt 已经对密码进行了哈希处理,所以如果你使用的是 bcrypt,那么同时使用 bcrypt+SHA256 是没有意义的;它不会变得更强大。单独使用 Bcrypt 就足够了。
这个网站上有很多关于这个主题的建议。搜索“密码散列”,您会找到它。
参见,例如,如何安全地散列密码?,我应该使用哪种密码散列方法?,最安全的密码哈希算法?,有没有安全专家推荐 bcrypt 用于密码存储?.
您希望使用尽可能慢的密码散列算法,以防止在您的数据库遭到破坏时对人们的密码进行离线字典攻击。
当然,这还不够。您应该采取多种步骤来尽可能安全地使用密码。这里有几个:
使用站点范围的 SSL/TLS。任何通过 HTTP 访问您的站点的尝试都应立即重定向到 HTTPS。
在您的网站上启用HSTS 。这告诉浏览器仅通过 HTTPS 连接到您。贝宝使用它。最新版本的 Firefox 和 Chrome 支持它。
搜索该站点,您会发现更多。