代码之家  ›  专栏  ›  技术社区  ›  kramer65

如何使用Laravel雄辩ORM搜索加密值?

  •  1
  • kramer65  · 技术社区  · 8 年前

    我有一个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' ).

    我试着添加

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

    1 回复  |  直到 8 年前
        1
  •  3
  •   Scott Arciszewski    8 年前

    你不能用你正在使用的工具来解决问题。

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

    CipherSweet ,它以可用于任何数据库驱动程序的方式实现可搜索加密。目前还没有一个雄辩的ORM集成在任何地方编写,但它应该是直接实现的。