如何安全地将密码存储在数据库中?

How to safe store password in database?

我想知道为我的公司创建基于PHP 或NodeJS 的密码存储工具。目前我们将密码保存在 KeePass 中,但这不利于员工之间共享密码。

我们需要保留密码,而不是哈希值。我只是在寻找如何以安全方式存储密码的良好做法。如何加密密码?有没有什么开源的加密密码的工具?

这样做不是为了 newbie/faint 的心。

为了确保系统安全,密码应以任何没有访问权限的人都无法读取的形式保存。在应用程序中存储(完整的)访问方法意味着数据不安全。因此,密码需要以某种可逆加密方式存储,但密钥不得存储在服务器上。

很遗憾,您需要知道密钥才能将加密数据放入数据库。使用对称加密(用于加密和解密的相同密钥),如果每个人都可以访问所有密码,这不是什么大问题 - 但它的价值非常有限,在大多数情况下会破坏安全。

解决方案是,在设置或更新密码时,使用每个应该有权访问的用户的 public 密钥使用非对称密码对其进行加密 - 导致加密密码的多个副本,每个副本只能使用用户的私钥解密。

因此,每个密码将由一系列记录表示,每个用户一个,包含相关用户身份、加密密码、初始化向量和密码的目标帐户。您还需要为每个用户保留 public 密钥,并为他们提供一种将加密数据和他们的私钥放在一起的机制——通过电子邮件发送数据是一种解决方案。允许用户上传他们的私钥不是一个好主意。您可以将私钥存储在浏览器的本地存储中并在 Javascript.

中解密