Как искать зашифрованное значение с помощью Laravel Eloquent ORM? - PullRequest
0 голосов
/ 26 октября 2018

У меня есть кодовая база Laravel, записи которой зашифровываются перед их вставкой в ​​базу данных Mysql.Шифрование выполняется с использованием Crypto методов библиотеки php-encryption .Если я хочу найти запись, основанную на одном из зашифрованных значений, работает циклически по всем записям:

$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;
}

Но это ничего не возвращает.Поэтому я нашел этот SO вопрос , предлагается добавить '0x', обернуть его в BIN2HEX() или HEX() или добавить x перед ним (например, x'abcd').

Я попытался добавить '0x' (что не работает), но я не уверен, как я мог бы включить другие идеи в мой код.

Кто-нибудь знает, как я мог опробовать эти идеис моим кодом?

1 Ответ

0 голосов
/ 26 октября 2018

Вы не можете решить проблему с помощью инструментов, которые вы используете.

Шифрование Laravel рандомизировано (это хорошо для безопасности, но делает его непрактичным для поискаоперации).

Извлечение CipherSweet , которое реализует шифрование с возможностью поиска таким способом, который можно использовать с любым драйвером базы данных.В настоящее время нигде не написана интеграция Eloquent ORM, но ее реализация должна быть простой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...