0

我知道有这样一百万次的问题,但我无法找到适合我需要的答案。

我正在为我的公司构建小型内部密码管理器,用于存储各种服务器的登录数据等。当新用户注册时,他的密码将以加盐/散列版本保存在数据库中,因此没有人可以访问它(对于那部分我认为这一切都可以,如果我错了,请纠正我)。

但是,当用户登录时,他可以使用其登录详细信息添加新服务器。

问题是,如何存储这些。

因为,在某些时候,我必须以纯文本形式向用户展示这个登录详细信息(这就是这个应用程序的重点)。我能想到的最好的方法是使用某种对称加密。想法是应用程序将使用对称加密加密登录详细信息并以这种方式将其保存到数据库中,然后当再次需要数据时将从数据库中提取数据,使用相同的密钥解密并呈现给用户(并且密钥应该在源中应用程序代码?)。

它可能是非对称加密,但如果公钥和私钥存储在相同的源代码中,那么它是相同的,那么使用它没有任何好处吗?

这似乎不太安全,但我想不出更好的办法。

有没有更好的方法来存储这个登录数据?

如果对您很重要,应用程序将使用 PHP,数据库使用 Oracle

4

1 回答 1

0

我只会使用对称加密。标准步骤是:

  • 从用户提供的密码(例如 PBKDF2 或 scrypt)派生对称密钥
  • 使用 AES-128-CBC 或更好的随机 IV 加密数据
  • HMAC 结果(例如 HMAC_SHA256)或仅使用 AES GCM 模式

在数据库中存储IV+密文+MAC。

如今,这一切都可以在浏览器中运行(参见 crypto-js 和 aes-js)。这样服务器永远不会看到明文密码(不确定这是否是必需的)。

MAC 也可以用作密码哈希,即如果 MAC 验证失败,则意味着提供的密码不正确。

于 2018-07-17T14:01:13.777 回答