存储可解密密码的安全方法

Jam*_*mer 8 php security passwords password-encryption

我正在使用PHP创建应用程序,并且要求必须能够解密密码,以避免将用户数据库切换到不同系统时将来出现问题.考虑到无法修改此未来系统的密码方法,我需要纯文本密码才能生成密码.

计划是使用存储在服务器上的公钥加密用户的密码.通过加密输入和比较结果来完成认证.没有解密完成.能够解密的私钥存储在异地以供以后使用.

您建议使用哪种加密/解密算法?当您认为攻击者无法使用私钥时,加密密码是否仍然像散列(MD5/SHA1)一样安全?

Sri*_*nan 8

我会改用Jammer的方法 -

  1. 生成公钥/私钥对.在您的网络服务器上对公钥进行硬编码.将私钥存储在Web服务器/数据库/任何开发人员无法访问的物理银行存储柜中.
  2. 用户注册时,使用公钥加密密码+盐.此步骤与使用哈希算法相同.将加密密码+ salt存储在数据库中.
  3. 如果要验证密码,请再次对其进行加密,并将其与存储在数据库中的值进行比较.

如果攻击者获取数据库,则他无法解密密码,因为他没有私钥.他无法获得私钥,因为它位于他无法触及的银行金库中.由于盐,两个相同的密码仍将以不同方式存储在数据库中.

我不建议使用上述方法,因为在将来的某个时间点,有人可能会滥用私钥并访问所有密码.

但是,如果您保证私钥将永远保密,那么我没有看到技术缺陷.

当然,我可能是错的.


Mac*_*cha 5

不要解密密码。如果您以后需要更改密码系统,请添加一个名为 storage_type(或其他)的字段。

然后,当您需要更改密码时,您将检查它是否是旧密码。如果是,下次登录时,您可以更改密码编码。否则,使用新系统登录。


Rei*_*ica 2

能够解密密码是一个坏主意(并且可能没有任何方法比未加密地存储它们更好)。听起来您的主要问题是如果您更改存储方法,则无法使用密码。就像 Linux 所做的那样,存储你如何用密码对密码进行哈希处理。例如 $1$salt$hash 就是 MD5。这样,如果您决定更改密码的存储方式,您仍然可以检查旧密码(如果有人正确登录,您可以使用新的哈希值更新他们的密码)。