RSA RSACryptoServiceProvider в .NET Compact Framework с использованием открытого ключа из полной .NET Framework - PullRequest
3 голосов
/ 27 мая 2011

В своей работе мы выполняем шифрование для защиты данных, и эти данные шифруются с помощью .NET Compact Framework и должны считываться обычной платформой .NET на сервере.Мы сталкиваемся с проблемой, когда компактная структура не может зашифровать (исключение) с использованием RSA с известным открытым ключом.Сервер передает открытый ключ на устройство Compact Framework.Ниже показано тестовое приложение, написанное для компактной среды, чтобы показать проблему.

string mod = 
    "rgTcL0/ZK3j5Rt6CigEsfyLDiERh2PuVzmZVdHbb/2jQOG5JEcAqqBoscDZ4PwJR8aO19xNVTce7"
  + "vzbEued32z2PLAvCcHFKGtOgNEeZ+ZcD6uHobsKws76BdjBrI7Pigk2HSkak21n2WoVcBVHoRmcn"
  + "eX7DPaB4atamhkbLoRBF1VlautDfhX9lnOFA2zyZUCB5CproavKF6wl19pZne2Q4U1vMtBAA2Q9N"
  + "aZFsrj/KjE3UtYKvjd4Oy55Hmtpb5P3CZAVpiyCTKq3gTxDJn69giyctu428DgkKacmZ4yTvkLWB"
  + "Ym/zWtAf9o8pI+3MwgF7wzuK5ypGack3l4/Skw==";

string exp = "AQAB";

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048);

RSAParameters p = new RSAParameters();
p.Modulus = Convert.FromBase64String(mod);
p.Exponent = Convert.FromBase64String(exp);

rsa.ImportParameters(p);

var bytes = rsa.Encrypt(System.Text.Encoding.ASCII.GetBytes("MIKE"), true);

Этот код выдает следующее исключение при вызове метода "Encrypt":

Framework: 3.5.7283.0
Exception: fOAEP 
InnerException: Could not evaluate expression

Stack Trace:
   at System.Security.Cryptography.RSACryptoServiceProvider.Encrypt
    (Byte[] rgb, Boolean fOAEP)

Кто-нибудьзнаете что-нибудь еще, что я должен попробовать / сделать?Я написал этот код в обычном .NET, и он работает просто отлично.Я могу зашифровать и расшифровать, используя разные экземпляры.Любая помощь будет оценена.

Спасибо!

1 Ответ

4 голосов
/ 27 мая 2011

Использование истинного значения для параметра fOAEP не поддерживается в Compact Framework (по крайней мере, в версии 3.5). Подробнее о параметре см. http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider.encrypt.aspx.

В CF 3.5 поддержка fOAEP = true не зависит от устройства. Вместо этого отклонение значения true жестко закодировано как проверка параметров в методе Encrypt.

...