如何选择256位Salted&来自mySQL的加密值

时间:2014-05-23 07:07:52

标签: php mysql

我已将加密值(如人名)存储在两列:id,names

这些纯文本名称值使用MCRYPT_RIJNDAEL_128(符合AES标准)和MCRYPT_MODE_CBC加密,然后将它们逐个插入到名为myTable的mySQl表中。

如果我加密" Bob"两次,三次或更多次,加密的字符串将始终不同。

但现在我有+5000行;我如何找到(SELECT)" Bob"在这张桌子上?

2 个答案:

答案 0 :(得分:1)

如果您对值进行加密,但随后能够通过未加密的原始值进行选择,则加密点将会丢失。永远不要加密非敏感值,这是性能损失而没有功能改进。

如果您坚持加密名称,那么您需要做的就是比较加密值。 Key和IV将是个体的(我敢于希望),这就是每次结果变得不同的原因。如果Bob登录,请使用他的密钥和IV加密他的用户名,然后将其与您的数据库值进行比较。

答案 1 :(得分:1)

当您需要搜索加密数据时,存储加密数据存在问题....

最佳解决方案是每个加密数据值有两列:

  • 商店encrypted" Bob"在一列中,以便您可以在需要恢复值时随后解密
  • 并且还存储了强大的hash原作" Bob"另一列中的值,然后您可以使用该列搜索搜索词的哈希值。第二列无法解密以返回原始值,如果您将其加盐,则需要对该列中的每个值使用相同的盐