Как зашифровать на внешнем сервере для дешифрования в приложении Laravel - PullRequest
1 голос
/ 18 октября 2019

У меня есть требование передавать конфиденциальные данные с исходного сервера (на котором работает Craft CMS) в API Laravel. В результате я хотел бы зашифровать строку на исходном сервере, чтобы ее можно было расшифровать в Laravel API для обработки.

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

Если это невозможно (из-за различий в среде), какая следующая лучшая альтернатива?

1 Ответ

1 голос
/ 18 октября 2019

Когда вы что-то шифруете в Laravel, он возвращает строку JSON в кодировке base64 со всей необходимой информацией: IV, зашифрованная строка, HMAC.

Чтобы создать строку в формате шифратора Laravel, вы можетевыполните следующие действия.

  1. Зашифруйте строку, используя AES-CBC. Хотя это не самый рекомендуемый режим, это режим, который использует Laravel. Вы можете использовать 256 или 128 бит, хотя вам, очевидно, следует использовать 256 (Laravel также пытается сериализовать переданное значение, поэтому вы должны сделать это тоже).

  2. Создайте HMAC с помощью функцииhash_hmac(). Необходимые параметры: IV (в кодировке base64) и зашифрованная строка. Объедините их и используйте свой ключ шифрования для создания HMAC, используя sha256 в качестве алгоритма хеширования.

  3. Создайте массив с IV, зашифрованной строкой и HMAC. Laravel использует для этого функцию compact(), поэтому я бы сделал то же самое.

  4. JSON кодирует результирующий массив, а base64 - результирующую строку JSON.

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

Для справки: Исходный код для класса Encrypter

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