Есть ли способ изменить алгоритм шифрования Laravel, чтобы он генерировал одно и то же значение для одной и той же строки?
Я сохраняю зашифрованные данные пользователя (включая электронную почту пользователя, которая используется для входа в систему) с помощью встроенного в Laravel метода шифрования.
При входе в систему я должен предоставить зашифрованную электронную почту для аутентификации, но алгоритм шифрования каждый раз генерирует разные строки для одной и той же строки.
Я использую следующую черту для сохранения зашифрованных данных.
Как я могу преодолеть это, пожалуйста?
namespace App\Traits;
use Illuminate\Support\Facades\Crypt;
/**
* Class Encryptable
* @package App\Traits
*/
trait Encryptable
{
/**
* If the attribute is in the encryptable array
* then decrypt it.
*
* @param $key
*
* @return $value
*/
public function getAttribute($key)
{
$value = parent::getAttribute($key);
if (in_array($key, $this->encryptable) && $value !== '')
$value = Crypt::decrypt($value);
return $value;
}
/**
* If the attribute is in the encryptable array
* then encrypt it.
*
* @param $key
*
* @return $value
*/
public function setAttribute($key, $value)
{
if (in_array($key, $this->encryptable))
$value = Crypt::encrypt($value);
return parent::setAttribute($key, $value);
}
/**
* When need to make sure that we iterate through
* all the keys.
*
* @return array
*/
public function attributesToArray()
{
$attributes = parent::attributesToArray();
foreach ($this->encryptable as $key)
{
if (isset($attributes[$key]))
$attributes[$key] = Crypt::decrypt($attributes[$key]);
}
return $attributes;
}
}
Использование в пользовательской модели
namespace App;
use App\Traits\Encryptable;
class User extends Authenticatable implements MustVerifyEmail
{
use Encryptable;
protected $encryptable = [
'first_name',
'sur_name',
'email',
'mobile',
];
}
1 ответ
Вы не Зашифрованная полезная нагрузка должна каждый раз отличаться, даже если один и тот же открытый текст зашифрован. Ларавел делает это правильно.
Причиной такого поведения является защита от взлома алгоритма и секрета, используемых для шифрования. Если одна и та же полезная нагрузка дает точно такой же зашифрованный текст, ее на порядок проще взломать.
То, что вы просите, даже не решит вашу проблему. Решение вашей проблемы - это не изменение схемы шифрования, это нечто совершенно иное. Подумайте об удалении этого вопроса и спросите о вашей реальной проблеме, а не о вашей попытке ее решения.