安全的方式来存储可解密的密码

我正在PHP中创建一个应用程序,为了避免将用户数据库切换到不同的系统以避免将来出现问题,必须有可能解密密码。 考虑到这是不可能修改这个未来系统的密码方法,我需要纯文本密码才能生成密码。

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

你会建议什么加密/解密算法? 当您认为私钥对攻击者不可用时,加密密码是否与散列(MD5 / SHA1)一样安全?


我会重申一下Jammer的方法 -

  • 生成一个公钥/私钥对。 硬编码您的网络服务器上的公钥。 将私钥存储在网络服务器/数据库/任何开发人员无法访问的实体银行存储柜中。
  • 用户注册时,使用公钥加密密码+盐。 这一步与使用散列算法相同。 将加密的密码+ salt存储在数据库中。
  • 如果要验证密码,请再次对其进行加密,并将其与数据库中存储的值进行比较。
  • 如果攻击者获取数据库,他不能解密密码,因为他没有私钥。 他无法获得私钥,因为它在银行金库之外。 由于盐的原因,两个相同的密码仍将以不同的方式存储在数据库中。

    我不建议使用上述方法,因为在将来的任何时候,有人可能会滥用私钥并获取所有密码。

    但如果你保证私钥永远保密,那么我看不到技术上的缺陷。

    当然,我可能是错的。


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

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


    能够解密密码是一个坏主意(并且可能没有什么办法可以比未加密的存储更好)。 这听起来像你的主要问题是能够使用密码,如果你改变你的存储方法。 只要做Linux就可以做到,存储你如何用密码散列密码。 因此,例如$ 1 $ salt $ hash是MD5。 这样,如果您决定更改密码的存储方式,您仍然可以检查旧密码(如果有人正确登录,则可以使用新密码更新其密码)。

    链接地址: http://www.djcxy.com/p/21769.html

    上一篇: Safe way to store decryptable passwords

    下一篇: Secure login: public key encryption in PHP and Javascript