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

php中的密码重置和加解密关系,php,encryption,passwords,privacy,Php,Encryption,Passwords,Privacy,我不仅在登录中使用密码,而且在加密中使用密码。 登录密码是加密的md5。 如果我丢失/忘记密码。我如何解密我的数据 比如说。用户使用密码=1234登录。 如果登录=>使用该密码解密数据 由于用户隐私问题,我不想在userdata中保存密码。 我想让用户相信他们的数据只能自己读取 如果用户更改密码,我如何解密加密数据? 因为密码是加密解密的密钥 谢谢。如果您将密码用作解密密钥,但密码丢失,则无法恢复数据。如果使用这种方法,则需要非常小心,以免丢失密码 在这种特殊情况下,您可以尝试暴力破解密码的MD

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

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

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

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


谢谢。

如果您将密码用作解密密钥,但密码丢失,则无法恢复数据。如果使用这种方法,则需要非常小心,以免丢失密码


在这种特殊情况下,您可以尝试暴力破解密码的MD5ed副本

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

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

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


加密数据是需要迈出的一大步。用户永远无法确定您没有对数据执行任何操作,因为您是提供(web)应用程序的人。因此,认为用户不应该信任您本身就是一个矛盾。考虑数据的安全性以防攻击(数据库安全性)、防盗保护等可能更值得付出代价。

根据定义,如果丢失了密码,则无法对正确加密的数据进行解密。唯一可行的方法是将实际密码存储在服务器上。但是TNO(不信任任何人)的安全性是没有意义的。要么用户控制了他的数据,因此也承担了全部责任,要么你控制了。你不能。如果您使用某些内容作为密钥来正确加密/解密数据,但丢失了该密钥,则该数据毫无价值,您需要重新捕获该数据并使用新密码对其重新加密。另外,请不要使用md5存储密码哈希。请参阅上关于使用md5进行密码哈希的说明。如果某些人只更改密码,则可以在更改之前要求使用旧密码,然后使用旧密码解密并再次使用新密码加密。感谢您的回复。尤其是你的话“要么用户控制了他的数据,从而也承担了全部责任,要么你做到了。”)用户无需存储在数据库中即可拯救的任何数据。规则是“用户只能插入加密密钥”。你好,昆汀,谢谢你的快速回复。如果有其他方法,你必须建议吗?规则是“用户只能插入加密密钥”。加密密钥不会存储在数据库中。关于安全问题或用户电子邮件呢?有什么办法吗?安全问题有什么用?这些可以用来帮助确定您是否应该给用户一个新密钥…但是您没有办法创建一个新密钥。