Зашифруйте объект с помощью Laravel 5.7 PHP и расшифруйте с помощью VueJS Javascript - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть приложение Laravel 5.7, которое шифрует объект и возвращает зашифрованный объект в мое приложение VueJS.

ОБРАТИТЕ ВНИМАНИЕ приведенный ниже код предназначен для пояснения, и яоднако не используется таким образом, концепция заключается в следующем.

Функция Laravel, запускаемая маршрутом

public function license() {
  var data = [{id: 1}, {expiry_date: '2019-02-25T10:47:12+00:00'}];
  $encrypted = \Crypt::encrypt(JSON.stringify(data));
  return $encrypted;
}

Vue JS Метод полученияОбъект

checkLicense() {
      this.$http.get(LARAVEL_ROUTE).then(res => {
        var key = 'LARAVEL_APP_KEY'; // NOT REAL
        var bytes = CryptoJS.AES.decrypt(res.data, 'LARAVEL_APP_KEY');
        var plaintext = bytes.toString(CryptoJS.enc.Utf8);
      });
}

Выше приведено следующее:

Uncaught (в обещании) Ошибка: искаженные данные UTF-8

Вещи, которые я пробовал:

  • Я проверил LARAVEL_APP_KEY, и я вижу, что он имеет префикс «base64:», поэтому я имеюпопытался удалить это из моего метода VueJS, где я объявляю ключ, но это не имело никакого значения.

  • Я также удалил объект и попытался зашифровать строку, которая дает тот же результат, что и выше.

Дополнительный вопрос:

Я также хотел бы зашифровать строку / объект с помощью чего-то другого, кроме LARAVEL_APP_KEY, поскольку я не хочу сохранять это значение в моем приложении VueJS.Ключ не должен быть сверхбезопасным, однако я бы не стал использовать LARAVEL_APP_KEY

1 Ответ

0 голосов
/ 25 февраля 2019

Исходя из моего опыта, я бы предложил следующее.

Во-первых, я не уверен, почему вы хотите зашифровать данные на сервере, а затем расшифровать на клиенте.Единственное преимущество, которое я смог увидеть в этом, - это предотвращение MITM-атак, и в этом случае вы должны использовать SSL.

Во-вторых, я вполне уверен, что ключ шифрования является закодированным значением base64 после префикса base64:.Поэтому вам нужно будет удалить это и затем base64 кодировать оставшуюся строку в VueJS, прежде чем пытаться расшифровать с помощью ключа.

В ответ на ваш вопрос о шифровании / дешифровании с помощью чего-либо, кроме APP_KEY, вы не можетеиметь несколько ключей, которые будут расшифровывать одно и то же значение.Криптография работает только тогда, когда у вас есть правильный ключ.

Я бы действительно не рекомендовал расшифровывать данные на клиенте, тогда кто-нибудь может получить ваш ключ шифрования, и если в другом месте была уязвимость и он мог получить доступ к вашей базе данных, ониможет расшифровать любые данные, которые им нравятся.

...