Как зашифровать длинные строки в PHP? - PullRequest
11 голосов
/ 08 июня 2011

Я использую PHP openssl_public_encrypt () для шифрования данных с использованием RSA.Но он не будет шифровать данные, размер которых превышает определенный размер.

Как я могу получить его для шифрования данных произвольной длины?

Ответы [ 3 ]

6 голосов
/ 14 июня 2013

RSA, используя заполнение PKCS1, позволяет делать только те строки, длина ключа (в байтах) - 11. Это не ограничение OpenSSL или PHP, а ограничение RSA.

Если вы хотите создавать более длинные строки с использованием набора функций openssl_ *, используйте openssl_seal и openssl_open . openssl_seal генерирует случайную строку, шифрует ее с помощью RSA и затем шифрует данные, которые вы фактически пытаетесь зашифровать с помощью RC4, используя ранее упомянутую случайную строку в качестве ключа.

phpseclib, чистая реализация PHP RSA , использует другой подход. Если вы настаиваете на шифровании строки, большей чем ключ RSA, она разбивает эту строку на куски, максимальный размер которых может обработать RSA, и затем объединяет результаты.

На странице phpseclib Совместимость OpenSSL обсуждается, как вы можете использовать phpseclib для того же, что и openssl_seal / openssl_open.

Надеюсь, это поможет!

4 голосов
/ 08 июня 2011

На странице php.net есть отличная подсказка для этой проблемы (как обычно) http://www.php.net/manual/en/function.openssl-public-encrypt.php#95307

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

Вы можете либо:

  • Шифрование данных с использованием симметричного метода шифрования с использованием случайного ключа, который затем шифруется с использованием открытого ключа асимметричного метода шифрования (случайный ключ, зашифрованный с помощью открытого ключа, необходим пользователю, который расшифровывает данные. )
  • Шифрование данных с использованием метода асимметричного шифрования, после разделения данных на куски размера, обрабатываемого методом асимметричного шифрования.

Первый реализует гибридную криптосистему . Используя PHP и расширение openSSL, вы можете использовать openssl_seal(), который (начиная с PHP 5.3.0) позволяет установить метод шифрования (по умолчанию RC4) и (начиная с PHP 7.0.0) вектор инициализации , Если вы не используете PHP 7.x или хотите написать код, совместимый с PHP 5.3.3 и более поздними версиями, и хотите иметь вектор инициализации, вы можете используйте openssl_random_pseudo_bytes() для генерации случайного ключа, openssl_encrypt() для шифрования данных и openssl_public_encrypt() для шифрования случайного ключа.

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

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