Можем ли мы полагаться на шифрование Laravel в будущем?
Мы создаем приложение, в котором нам нужно хранить данные, зашифрованные в базе данных, и вместо того, чтобы использовать MySql AES_ENCRYPT и AES_DECRYPT, мы планируем использовать встроенные функции шифрования и дешифрования laravel.
Будет ли это доказательством будущего, поскольку мы не хотим терять данные для будущих обновлений.
1 ответ
Прежде всего, ничто не является действительно "будущим". На самом деле, мы находимся на грани того, что текущее шифрование устарело с помощью квантовых вычислений, что делает все текущие методы шифрования не очень надежными в будущем.
Есть ли у Тейлора какие-либо планы изменить его в обозримом будущем? Может быть, а может и нет, но единственный реальный способ узнать это спросить его напрямую. Он довольно активен в Твиттере и в других местах, так что с точки зрения владельцев бизнеса, он довольно доступен. Он также в целом хороший человек, так что не бойтесь пинговать его.
public function encrypt($value, $serialize = true)
{
$iv = random_bytes(16);
// First we will encrypt the value using OpenSSL. After this is encrypted we
// will proceed to calculating a MAC for the encrypted value so that this
// value can be verified later as not having been changed by the users.
$value = \openssl_encrypt(
$serialize ? serialize($value) : $value,
$this->cipher, $this->key, 0, $iv
);
if ($value === false) {
throw new EncryptException('Could not encrypt the data.');
}
// Once we get the encrypted value we'll go ahead and base64_encode the input
// vector and create the MAC for the encrypted value so we can then verify
// its authenticity. Then, we'll JSON the data into the "payload" array.
$mac = $this->hash($iv = base64_encode($iv), $value);
$json = json_encode(compact('iv', 'value', 'mac'));
if (! is_string($json)) {
throw new EncryptException('Could not encrypt the data.');
}
return base64_encode($json);
}
Это основная функция encrypt() от master в репозитории, и, судя по всему, ее вряд ли можно будет изменить слишком сильно, не переписав полностью. И хотя Laravel на самом деле не следует спецификации версий SemVer, он, как правило, следует внутренне согласованной схеме управления версиями, поэтому наиболее вероятные времена для его изменения - целое число и первое десятичное изменение (т. Е. От 5,4 до 5,5 или 5,5 до 6,0).
Тем не менее, стоит отметить, что к нему фактически обращаются через контракты и шаблон поставщика услуг (поэтому единственный раз, когда на класс ссылаются непосредственно, это связанный с ним класс ServiceProvider). Это означает, что вы можете использовать это на данный момент, и если в будущем появятся серьезные изменения, вы можете скопировать эту версию в свой собственный класс шифрования, заменить ссылку в config/app.php
в Illuminate\Encryption\EncryptionServiceProvider
новому поставщику услуг шифрования, и вы сохранили этот метод и можете использовать его в своем приложении, не внося никаких других изменений в свое приложение.
Немного побочного примечания: вы можете также рассмотреть возможность написания "конвертера шифрования", если вы обнаружите, что вам действительно нужно изменить алгоритмы (например, если ваш оригинальный алгоритм небезопасен), используя метод расшифровки старой системы для дешифрования всего, затем повторно - зашифровать все это с помощью новой системы и снова сохранить. Затем приложение будет просто использовать новый алгоритм для продвижения вперед.