如何比较带有随机种子的加密字符串?

6
我希望将个人资料细节加密存储在数据库中。但是,某些细节应该是唯一的,由于加密算法为每次加密随机化种子,所以很难确定该值是否已存储在数据库中。
1. 如果行数很多,我可以循环遍历每一行并解密必要的列,但这需要太长时间。
2. 我可以存储这些(未加密)细节的哈希值,但这会杀死加密的目的。
那么,如何比较与保存在数据库中的其他加密字符串(具有随机种子)?
任何帮助都将不胜感激。使用php(MCRYPT_RIJNDAEL_256/ NOFB)进行加密,数据库为MySQL。
编辑/解决方案:此时,除了加密值之外还将数据存储为哈希值似乎是最好的解决方案。这使得验证唯一列对我来说足够容易。感谢每个留下评论/答案的人。

有趣的问题,虽然我认为除了“在单独的列中存储不加密的数据”之外没有答案...但我们会看到。 - Pekka
1
我会使用哈希函数,并结合用户相关的盐值,比如他们的用户名。这样,即使一个用户的某个个人资料字段的明文值被泄露,也无法通过该值来推断其他用户的哈希值,因为它们的哈希值是不同的。 - halfer
@Pekka 是的,让我们看看... - Alasjo
@halfer 我需要能够解密这些值,并将新帖子与每一行进行比较。 - Alasjo
我应该明确说明哈希值将与您的加密列一起存储,因此您仍然可以解密。要进行比较,您可以获取纯文本值,然后循环遍历每一行,并添加您的盐值,对结果进行哈希,然后与存储的哈希值进行比较。哈希匹配意味着纯文本也匹配。如果您有很多行,则显然不是很好-但是您可以在存储过程中执行它以加快循环速度。 - halfer
显示剩余5条评论
1个回答

3

您选择的算法不能提供您现在所需的功能。在选择算法之前,您需要先确定自己的需求。


1
现在改变算法还不晚,你有什么建议吗? - Alasjo
1
要么为每个密码使用相同的种子,要么使用两个单独的跟踪方案,一个仅用于捕获重复项(不跟踪哪个用户拥有该密码!),另一个用于身份验证。 - David Schwartz
这个问题不涉及密码,但我看到需要一个单独的数据集进行比较。谢谢。 - Alasjo
@Alajo 哦,我错过了那个。但是没关系。 - David Schwartz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接