Как зашифровать длинные строки в PHP?

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

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

Ответ 2

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

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

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

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

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