代码之家  ›  专栏  ›  技术社区  ›  user2710326

php中的密码重置和加解密关系

  •  0
  • user2710326  · 技术社区  · 11 年前

    我不仅在登录时使用密码,而且在加密时也使用密码。 登录密码是加密的md5。 如果我丢失/忘记了密码。如何解密我的数据?

    例如用户使用密码=1234登录。 如果登录=>使用该密码解密数据。

    由于用户隐私问题,我不想将密码保存在用户数据中。 我想让用户相信他们的数据只能自己读取。

    如果用户更改密码,我如何解密加密数据? 因为密码是用于加密和解密的密钥。

    感谢

    2 回复  |  直到 11 年前
        1
  •  1
  •   Quentin    11 年前

    如果您使用密码作为解密密钥,并且丢失了密码,则无法恢复数据。如果你使用这种方法,那么你需要非常小心,不要丢失密码。

    在这种特殊情况下,您可以尝试对密码的MD5副本进行暴力破解。 MD5 is very weak, and unsuitable for storing hashed passwords .

        2
  •  0
  •   Maarten Bodewes    11 年前

    在你目前的方案中,显然不可能做到这一点。不过,你也许可以解决这个问题。您需要的是为您的方法添加额外的层。

    首先,使用随机生成的密钥对用户数据进行加密。该密钥将是数据加密密钥。现在,您可以使用任何其他密钥对该密钥进行加密。其中一个密钥将由用户密码生成(通过SSL发送,在服务器上使用PBKDF2从密码中导出密钥)。

    现在,您可以考虑其他方案来解密数据加密密钥。一种是使用从标准密码恢复短语(宠物的名字+母亲的年龄)派生的密钥。另一种方法是用公钥加密密钥,并将私钥安全地存储在保险库中。加密数据密钥的安全性当然等于最不安全的密钥加密密钥。

    加密数据是一个相当大的步骤。用户永远不能确定你没有对数据做任何事情,因为你是提供(web)应用程序的人。因此,认为用户不应该信任你本身就是一种矛盾。考虑数据的安全性(数据库安全性)、防盗保护等可能更值得付出代价。