如何使用CakePHP匿名化数据库中的凭据

如何使用CakePHP匿名化数据库中的凭据,php,security,cakephp,encryption,Php,Security,Cakephp,Encryption,我的数据库中的登录凭据有点问题。 我在做一个敏感项目,所有数据都需要匿名。 这是我的问题: 我正在使用电子邮件地址和密码来识别我的用户。但是电子邮件地址不是匿名数据,例如:firstname。lastname@domain.com。所以我需要匿名这些数据 对于我的其他数据,如lastname或firstname,我在CakePHP中使用Security::encrypt($firstname,$privatekey)。(我的私钥对于每个用户都是唯一的) 但我的电子邮件地址是用于用户登录的,如果我

我的数据库中的登录凭据有点问题。 我在做一个敏感项目,所有数据都需要匿名。 这是我的问题:

我正在使用电子邮件地址和密码来识别我的用户。但是电子邮件地址不是匿名数据,例如:
firstname。lastname@domain.com
。所以我需要匿名这些数据

对于我的其他数据,如
lastname
firstname
,我在CakePHP中使用
Security::encrypt($firstname,$privatekey)
。(我的私钥对于每个用户都是唯一的)

但我的电子邮件地址是用于用户登录的,如果我用同样的方式对其进行加密,则登录不再有效。我试图加密我的登录表单发送的电子邮件,但结果与第一次加密不同

我无法使用SHA方法加密此数据,因为我需要在用户界面中显示它

我目前唯一能找到的解决方案是用我自己的方式加密这些数据,但它并不安全

我的问题是:

  • 可以加密此数据并保持登录工作
  • 如果是,我怎么做
提前谢谢你

建议一-使用随机用户名,这样你也可以加密电子邮件 因为你已经加密了名字,你也可以用同样的方式加密电子邮件

那么,用户将如何登录

解决方案是生成每个用户都可以使用的随机用户名。通过这种方式,您无法从“user19281a18a7as”推断出多少信息,因为所有其他字段都将被加密

您需要注意用户名尽可能随机,因此不要使用序列生成它:)

有趣的是,你的登录屏幕看起来更像是要两个密码,因为用户名也变成了密码

建议二 使用API密钥允许用户登录。因此,与其使用难看的用户名和密码,不如使用一个难看的长API密钥,用户必须将其输入登录框

这并不优雅,但如果他们想匿名,这就是代价:)


如果您愿意,您甚至可以使用私钥/公钥,因为您的用户熟悉它们

2-way encryption?&仅供参考,加密电子邮件地址不会使数据匿名,因为加密是可逆的。如果需要以无法恢复的方式匿名数据,则需要使用强加密单向散列(至少是SHA-256),最好使用salt。这将使数据或多或少不可恢复(如果salt保持安全,即使它不安全,仍然需要字典攻击来恢复任何有意义的数据)@GordonM如果我使用SHA256散列我的电子邮件地址,我无法显示它。我们使用的加密方法是每个用户都有一个唯一的私钥和一个salt,所以反转起来更复杂it@ThomasRollet然后你有两个相互矛盾的问题。如果数据是匿名的,那么它就不能显示,因为这就是匿名的全部意义。如果可以显示,则不能匿名,因为它可以通过明文数据段(甚至可能包含用户的姓名)来识别特定用户。你把匿名和安全混淆了吗?我不确定我的想法是否可行。但是,如果我是你,我会这样做。我可能会使用两列作为电子邮件地址,但用途不同。一列存储哈希版本,另一列是非对称加密版本,我可以用脱机私钥或类似的东西解密:)