Security 检查数据库中加密的双电子邮件地址

Security 检查数据库中加密的双电子邮件地址,security,validation,encryption,Security,Validation,Encryption,人们可以在我的网站上注册时事通讯。 他们的电子邮件地址和其他个人信息将在数据库中加密 现在,对于注册表,我想检查新输入的电子邮件地址是否已经在我的数据库中,但由于所有电子邮件都是加密的,我无法真正检查,除非我循环检查每个可能的电子邮件地址,解密它,看看它是否与新输入的电子邮件匹配?对吗?或者有没有更有效的方法来执行此操作?如果您一直使用相同的加密密钥,只需搜索加密版本即可。如果不这样做,您仍然可以另外存储地址的散列并与之进行比较。如果您一直使用相同的加密密钥,您只需搜索加密版本即可。如果不这样做

人们可以在我的网站上注册时事通讯。 他们的电子邮件地址和其他个人信息将在数据库中加密


现在,对于注册表,我想检查新输入的电子邮件地址是否已经在我的数据库中,但由于所有电子邮件都是加密的,我无法真正检查,除非我循环检查每个可能的电子邮件地址,解密它,看看它是否与新输入的电子邮件匹配?对吗?或者有没有更有效的方法来执行此操作?

如果您一直使用相同的加密密钥,只需搜索加密版本即可。如果不这样做,您仍然可以另外存储地址的散列并与之进行比较。

如果您一直使用相同的加密密钥,您只需搜索加密版本即可。如果不这样做,您仍然可以另外存储一个地址散列并与之进行比较。

一个简单的想法是:创建一个包含邮件md5散列的表,并在SQL WHERE子句中比较它?不确定这是否非常有效。

只是一个简单的想法:用邮件的md5散列创建一个表,并在SQL WHERE子句中进行比较?不确定这是否有效。

谢谢您的回复。但是,当我保存电子邮件地址的加密版本时,我总是在我的电子邮件地址数据库字段中看到另一个值。所以我真的不能搜索加密版本?我以为只有散列版本的电子邮件地址才会有相同的值?我不知道你用什么来加密。如果使用具有固定密钥的对称密码,则会得到相同的加密值。但正如我所说,如果不是这样,你仍然可以添加一个带有散列的字段,并且只解密和检查散列匹配的地址。谢谢你的回复。但是,当我保存电子邮件地址的加密版本时,我总是在我的电子邮件地址数据库字段中看到另一个值。所以我真的不能搜索加密版本?我以为只有散列版本的电子邮件地址才会有相同的值?我不知道你用什么来加密。如果使用具有固定密钥的对称密码,则会得到相同的加密值。但正如我所说的,如果不是这样,您仍然可以添加一个带有散列的字段,并且只解密和检查散列匹配的地址。