【发布时间】:2012-01-31 17:32:29
【问题描述】:
我想在数据库中存储加密的配置文件详细信息。但是,有些细节应该是唯一的,而且由于加密算法会随机化每次加密的种子,因此很难判断该值是否已存储在数据库中。
- 我可以遍历每一行并解密必要的列,但如果行数很大,这将花费太长时间。
- 我可以存储这些(未加密)详细信息的哈希值
但这会首先破坏加密点。
那么,我如何将加密字符串(带有随机种子)与数据库中保存的其他字符串进行比较?
非常感谢任何帮助。用php加密(MCRYPT_RIJNDAEL_256/NOFB),数据库是MySQL。
编辑/解决方案:除了加密值之外,存储散列的数据似乎是我最好的解决方案。这使得验证唯一列对我来说很容易。感谢大家留下他们的 cmets/answers。
【问题讨论】:
-
有趣的问题,虽然我认为除了“将它们未加密地存储在单独的列中”之外没有其他答案......但我们会看到
-
我会将哈希与用户相关的盐一起使用,例如他们的用户名。这样,如果一个用户的个人资料字段已知,则无法推断出另一个用户在该字段中具有相同的未哈希值,因为他们的哈希值会不同。
-
@Pekka 是的,让我们看看...
-
@halfer 我需要能够解密这些值并将新帖子与每一行进行比较。
-
我应该明确表示,除了您的加密列之外,还会存储哈希值,因此您仍然可以解密。要进行比较,您可以获取明文值,然后遍历每一行,并添加您的盐值,对结果进行哈希处理,然后与存储的哈希值进行比较。哈希中的匹配意味着明文也匹配。显然,如果您有很多行,那就不好了 - 但您可以在存储过程中执行此操作以加快循环。
标签: php encryption duplicates