【发布时间】:2013-03-28 12:25:36
【问题描述】:
我有一个网络服务(类似于在线商店),用户可以在其中保存他们的数据。我需要加密该数据,以便只有管理员和用户自己才能读取该数据。
每个经理和用户都有自己的密码存储在数据库中。
首先我考虑过使用 RSA(公钥/私钥),但我不知道如何使用管理员和用户的不同密码访问加密数据。
顺便说一句:我可以提示用户和管理员每次尝试访问加密数据时输入他的密码(与数据库中的哈希密码比较并解密安全数据)。
请帮助并原谅我的英语不好。 提前致谢!
编辑:最简单的方法是使用硬编码的主密码进行加密/解密,但我认为这是非常不安全的。
EDIT2:好的,我想我知道了: 1.生成唯一密钥 2. 使用对称加密使用(1)中的唯一密钥加密数据 3. 使用用户密码加密来自 (1) 的唯一密钥,并将其与用户凭据一起存储 4. 使用管理员密码加密来自 (1) 的唯一密钥,并将其与管理员凭据一起存储
现在当经理想要访问数据时,我提示他输入密码,然后从 (4) 解密哈希,从 (1) 获取唯一密钥并解密安全数据。来自用户的解密是一样的:(3)->(1)->data
所以现在的问题是让多个用户都可以使用它->user_data/managers,哈哈
EDIT3:忘了说:用户创建一次数据,然后经理将其用于内部使用。
【问题讨论】:
-
您在 EDIT2 中概述的方法的问题是创建数据时,每个相关用户都必须输入他们的密码。
-
@sidoh 是的,没错。从用户的角度来看,他似乎在创建数据并通过密码保护数据。而且即使黑客窃取了数据库,他也无法解密用户数据,因为用户的密码也被散列了。
-
对。不过,我的观点是,如果您需要允许使用多个密码访问数据,您将始终需要同时拥有至少两个密码。这对用户来说听起来很烦人,对吧?每次用户创建管理员应该能够访问的数据时,用户和管理员都必须输入密码。
-
另外,您必须保留 N 个数据副本,其中 N 是您希望允许访问的用户数。
-
哦,对不起,我没有提到:用户创建一次数据,然后经理使用该数据创建内部使用文档。
标签: php passwords rsa encryption