#php #laravel #encryption
#php #laravel #шифрование
Вопрос:
Я пытаюсь расшифровать определенные столбцы в моем AppModelsUser
. Для этого я создал признак для модели для использования.
namespace AppTraits;
use IlluminateSupportFacadesCrypt;
trait Encryptable {
public function getAttribute($key) {
$value = parent::getAttribute($key);
if (in_array($key, $this->encryptableColumns())) {
return Crypt::decryptString($value);
}
return $value;
}
public function setAttribute($key, $value) {
if (in_array($key, $this->encryptableColumns())) {
$value = Crypt::encryptString($value);
}
return parent::setAttribute($key, $value);
}
protected function encryptableColumns() {
return [
'name',
'service_number',
'team',
'company',
'callsign'
];
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что $value
возвращаемое из getAttribute
метода не расшифровывается. Если я использую die(Crypt::decryptString($value))
, я вижу, что значение все еще зашифровано.
Мой AppModelsUser
имеет use AppTraitsEncryptable;
Любая помощь приветствуется.
Обновление: если я изменю его на return 'foo';
все значения, станет foo
так, что он определенно выполнит метод.
Если я запускаю Crypt::decryptString(Auth::user()->name)
, это работает, поэтому я в замешательстве.
Ответ №1:
Итак, я в замешательстве, но это, похоже, решило проблему:
return Crypt::decryptString(Crypt::decryptString($value));
Комментарии:
1. Это указывает на то, что где-то в строке вы случайно дважды зашифровали значение.
2. Это все тестовые данные, поэтому, возможно, мне следует обрезать данные и определить, где это произошло, и перейти оттуда? Исходное сообщение должно работать так, как ожидалось? @ceejayoz
Ответ №2:
Эти ссылки могут вам помочь. Я знаю, что это не отвечает на ваш вопрос, но показывает другой и более простой способ достижения того, что необходимо.