phpseclib по умолчанию использует режим CBC. Этот режим требует IV. Как отмечалось в некоторых других комментариях, версия phpseclib, которую вы используете, использует IV всех нулевых байтов, когда их нет.
$crypt->setKey($password);
Тот факт, что имя переменной равно $password
, заставляет задуматься, используется ли какой-либо тип PBKDF в вашей реализации C #. Трудно сказать, потому что у вас нет кода на C #.
Я уже получаю "Заполнение недействительно и не может быть удалено." ошибка при попытке расшифровать зашифрованную строку
phpseclib по умолчанию использует заполнение PKCS8. то есть. если открытый текст кратен длине блока, он добавит 16x 0x16 байтов. Если это два байта, кратные длине блока, он добавит 2x 0x02 байта.
Возможно, ваша реализация на C # использует другой тип заполнения. Если это так, вы можете реализовать свой собственный, сначала отключив заполнение PKCS8, выполнив $crypt->disablePadding();
, а затем применив собственный пользовательский заполнитель перед выполнением шифрования.