Успешное шифрование данных RSA в C# - PullRequest
1 голос
/ 28 марта 2020

Я пытаюсь внедрить RSA-шифрование в мою C# программу.

Вот мой код:

using System;
using System.Security.Cryptography;

string dataToEncrypt = "Data to Encrypt here";
string modulus= "Public Key here";
string exponent= "Public Key Kxpiry here";

RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

RSAParameters RSAKeyInfo = new RSAParameters();

RSAKeyInfo.Modulus = Encoding.UTF8.GetBytes(modulus);
RSAKeyInfo.D = Encoding.UTF8.GetBytes(dataToEncrypt);
RSAKeyInfo.Exponent = Encoding.UTF8.GetBytes(exponent);

RSA.ImportParameters(RSAKeyInfo);

Я получаю этот код ошибки:

System.Security.Cryptography.CryptographicException: 'Bad Data.'

В этой строке выдается ошибка: RSA.ImportParameters(RSAKeyInfo);

Другая информация:

  • Visual Studio 2019
  • Windows Приложение Forms (. NET Framework)
  • Операционная система: Windows 10 Профессионал

Что я пропускаю / делаю неправильно?

1 Ответ

1 голос
/ 28 марта 2020

Генерация ключа RSA - это очень специфичный c процесс, который использует два (или более) простых числа. Вы не можете просто выбрать случайные значения для безопасности RSA. С другой стороны, RSA полагается на модульное возведение в степень во время шифрования, и это все еще может «работать», то есть генерировать небезопасный ответ.

CSP (поставщики услуг шифрования c) могут, однако, накладывать дополнительные ограничения. Например, Microsoft CSP имеет следующее ограничение в отношении размера ключа:

Windows CSP разрешают размеры ключей от 384 до 16384 бит для версий Windows до Windows 8.1 и размеры ключей от 512 до 16384 бит для Windows 8.1.

Поскольку размер ключа указан как размер модуля. Кроме того, размер ключа также должен быть кратным 8. Это означает, что самый старший бит в байтовом массиве должен быть установлен в 1, и это никогда не имеет место для UTF-8.

Кроме того, могут также быть ограничения на показатель publi c; для Windows CSP он должен быть меньше 32 бит. Обычно для него просто устанавливается значение 010001 в шестнадцатеричном формате (65537 или пятое простое число Ферма, называемое F4).


Расширение CNG в RSA кажется более гибким, так что вы можете попробуйте это также, если вы хотите проверить некоторые особенности RSA.

Однако, в конце концов, вам нужно использовать процедуры генерации пары ключей RSA для создания правильной пары ключей RSA; ничто другое не будет в безопасности.

...