前言

如果您是一名 Web 开发者,您很可能需要建立一个用户账户系统。对用户账户系统来说,最重要的部分就是如何保护用户的密码。用户账户数据库经常被入侵,因此,如果您的网站被攻破,您绝对需要采取措施来保护用户的密码。保护密码的最佳方法是使用加盐密码散列(Salted Password Hashing)。这篇文章将会解释原因,并展示加盐密码散列的正确方法。

关于如何正确进行密码散列有很多相互矛盾的想法以及误解,可能是由于网络上的错误信息太多。其实,密码散列属于非常简单的事情,但有很多人都弄错了。在这篇文章里,我希望不仅可以解释正确的方法,还能解释为什么应该这样做。

重要警告: 如果您正在考虑自己编写密码散列代码,请不要这样做! 这太容易搞砸了。不,您在大学上的密码学课程不能让您免于这个警告。这适用于所有人:不要自己编写密码学算法! 毕竟存储密码的问题已经被解决了。您可以使用 phpass,位于 defuse/password-hashing 的 PHP、C#、Java 和 Ruby 实现,或者 libsodium

如果您由于某种原因错过了上面的大红色警告提示,请立即阅读它。真的,本指南并不是要引导您完成自己编写存储系统的过程,而是要解释为什么密码应该以某种特定的方式存储。

您可以使用以下链接跳转到文章的不同部分:

  1. 什么是密码散列?
  2. 散列是如何被破解的
  3. 加盐
  4. 无效的散列方法
  5. 如何正确散列
  6. 常见问题