我已将加密值(如人名)存储在两列:id,names
这些纯文本名称值使用MCRYPT_RIJNDAEL_128(符合AES标准)和MCRYPT_MODE_CBC加密,然后将它们逐个插入到名为myTable的mySQl表中。
如果我加密" Bob"两次,三次或更多次,加密的字符串将始终不同。
但现在我有+5000行;我如何找到(SELECT)" Bob"在这张桌子上?
答案 0 :(得分:1)
如果您对值进行加密,但随后能够通过未加密的原始值进行选择,则加密点将会丢失。永远不要加密非敏感值,这是性能损失而没有功能改进。
如果您坚持加密名称,那么您需要做的就是比较加密值。 Key和IV将是个体的(我敢于希望),这就是每次结果变得不同的原因。如果Bob登录,请使用他的密钥和IV加密他的用户名,然后将其与您的数据库值进行比较。
答案 1 :(得分:1)
当您需要搜索加密数据时,存储加密数据存在问题....
最佳解决方案是每个加密数据值有两列:
encrypted
" Bob"在一列中,以便您可以在需要恢复值时随后解密hash
原作" Bob"另一列中的值,然后您可以使用该列搜索搜索词的哈希值。第二列无法解密以返回原始值,如果您将其加盐,则需要对该列中的每个值使用相同的盐