Шифрование RC2 с 20-байтовым ключом в Asp.Net
Мне дали требование реализовать шифрование / дешифрование RC2 на сайте Asp.Net. Есть некоторые данные, которые необходимо безопасно передавать другим системам, и этот метод шифрования уже используется. Я пробовал несколько различных подходов к этому, но все реализации имеют длину ключа по умолчанию, которую нельзя изменить, даже если алгоритм допускает переменную длину ключа ( http://en.wikipedia.org/wiki/RC2).
Я пытаюсь выяснить, упустил ли я что-то из своего анализа или есть лучший вариант, который вы могли бы порекомендовать.
.Net подход
Мой первый подход состоял в том, чтобы попытаться использовать.NET RC2CryptoServiceProvider. Это не будет работать, потому что длина ключа ограничена.
http://msdn.microsoft.com/en-us/library/system.security.cryptography.rc2.keysize.aspx
"Этот алгоритм поддерживает длину ключа от 40 до 1024 бит с шагом 8 бит, но реализация RC2CryptoServiceProvider поддерживает только длину ключа от 40 до 128 бит с шагом 8 бит".
Подход OpenSSL.Net
Существует.NET-оболочка OpenSSL, которую я пытался использовать. http://sourceforge.net/projects/openssl-net/
Он работал нормально, но, похоже, поддерживает функции шифрования по умолчанию, и я не нашел способа изменить длину ключа.
Cipher ciph = Cipher.RC2_CBC;
ciph.KeyLength = 20; // <---- Keylength cannot be assigned to it is readonly
CipherContext RC2 = new CipherContext(ciph);
Позвоните OpenSSL напрямую
Я также попытался вызвать OpenSSL через командную строку, создав процесс и получив выходные данные. Я столкнулся с той же проблемой, которая заключается в том, что встроенные функции не допускают переменную длину ключа.
http://www.openssl.org/docs/apps/enc.html
Программа enc поддерживает только фиксированное количество алгоритмов с определенными параметрами. Поэтому, если, например, вы хотите использовать RC2 с 76-битным ключом или RC4 с 84-битным ключом, вы не сможете использовать эту программу.