我使用Laravel Crypt::encrypt("text")
加密文本,但每次我得到不同的结果。我希望在数据库中比较加密结果。
$sql = 'SELECT * FROM users WHERE `encrypted_field` = "'.Crypt::encrypt('text').'"';
但是因为Crypt::encrypt('text')
每次都返回不同的结果,所以查询什么也不返回。
如何处理这个问题?
答案 0 :(得分:2)
这取决于你想做什么:
如果您想在将来解密某些内容,可以使用
$encrypted = Crypt::encrypt('foobar');
$decrypted = Crypt::decrypt($encrypted); //returns foobar
在这种情况下,加密值每次都会改变。但请记住:如果您更改了应用密钥,则无法使用它来解密旧字符串。
但如果你只需要哈希,例如如果密码始终相同,那么您可以使用
$password = Hash::make('secret');
$password = bcrypt('secret'); // same as Hash::make
要将散列与非散列单词进行比较,您可以使用
if (Hash::check('secret', $hashedPassword))
{
// The passwords match...
}
答案 1 :(得分:0)
直接而直接的答案是,你不能。不要试试,你只会降低自己的安全性。
但是,您可以通过我调用blind indexing的过程安全地索引加密信息。
hash_hmac('sha256', $unencryptedData, $someVeryUnguessableKey)
。这允许您以盲目的方式执行查找,而不必削弱加密。但是,请注意,所述设计并非不受时间攻击的影响,并且务必记录并限制每次访问数据的尝试(无论是否成功)。