php - 如何使用 Laravel Eloquent ORM 搜索加密值?

标签 php mysql laravel encryption binary

我有一个 Laravel 代码库,其中的记录在插入 Mysql 数据库之前会被加密。加密是使用 Crypto methods of the php-encryption library 完成的。如果我想根据其中一个加密值查找记录,则可以循环遍历所有记录:

$records = TheModel::all();
foreach ($records as $record){
    if ($record->thefield == $value) {  // thefield is decrypted in the Eloquent model definition
        print $record->id;
    }
}

不幸的是,这不太可扩展。数据库仍然很小,但增长很快,因此我需要更改此代码以实际执行查询。

所以我尝试了以下代码:

$encryptedValue = \App\Crypt::encryptData($value);
$records = TheModel::where('thefield', $encryptedValue)->get();
foreach ($records as $record){
    print $record->id;
}

但这不会返回任何内容。所以我然后找到了this SO question建议添加'0x',将其包裹在BIN2HEX()HEX()中或添加x > 之前(如 x'abcd')。

我尝试添加 '0x' (这不起作用),但我不确定如何将其他想法合并到我的代码中。

有人知道我如何用我的代码尝试这些想法吗?

最佳答案

您无法使用您正在使用的工具解决问题。

Laravel 的加密是 randomized (这对于安全性来说是一件好事,但对于搜索操作来说是不切实际的)。

查看CipherSweet ,它以可与任何数据库驱动程序一起使用的方式实现可搜索加密。目前还没有任何地方编写 Eloquent ORM 集成,但它应该很容易实现。

关于php - 如何使用 Laravel Eloquent ORM 搜索加密值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53011356/

相关文章:

php - 我的 Mac 上没有安装 PHP 7.2 的 APCu

mysql - Hibernate/Spring : getHibernateTemplate(). save(...) 卡住/挂起

php - 如何将数组(不同)插入到 mySQL 中?

php - 图像已上传到文件夹中时如何解决 Laravel 中的 "file does not exist or is not readable"

javascript - Laravel (Eloquent) 相当于 Mongoose 的 populate() 方法

php - 如何在 Ubuntu 和 Windows 中设置环境变量并安全存储?

php - 是否可以使用 PHP mysqli_multi_query 跟踪 mysql 脚本执行的进度?

php - 如何在表上创建复合主键

php - 如何访问xampp主页?

如果 GROUP_CONCAT 返回 NULL,mySQL 排除整个结果