Как я могу зашифровать данные с помощью открытого ключа из сертификата ECC X509 в .net framework в Windows?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу зашифровать данные с помощью открытого ключа из сертификата ECC X509 в .net framework в Windows?

Сообщение Anonymous »


Я использую:
[*]Windows 10 (версия 1709, сборка ОС 17025.1000) [*].net framework 4.7 [*]VS 2017 (версия: 15.3.5)
Вот что я сделал:
[*]
Получил самозаверяющий сертификат ECC с использованием OpenSSL и шагов, описанных в сценарии по адресу https://gist.github.com/sidshetye/4759690, с изменениями:

a) Использована кривая NIST/P-256 для 256-битного простого поля

б) Используемый SHA-256
[*]
Загрузить сертификат из файла (созданного на предыдущем шаге) в объект X509Certificate2
[*]
Импортирован файл PFX в хранилище доверенных сертификатов Windows (для тестирования). Это успешно.
[*]При проверке импортированного сертификата поле открытого ключа отображается как «ECC (256 бит)», а параметры открытого ключа — как «ECDSA_P256». [*]Далее попытались выяснить, как зашифровать этот сертификат.
Я застрял на последнем шаге, потому что все примеры, использующие объект X509Certificate2, преимущественно используют только RSA, а я использую сертификат ECC. Для сертификата RSA существует метод расширения GetRSAPublicKey в X509Certificate2, а класс RSA имеет метод Encrypt. Однако для сертификатов ECC такого метода не существует.

Затем я наткнулся на этот пост (Загрузка сертификата с использованием X509Certificate2 с открытым ключом ECC) и попробовал выполнить следующее (хотя мне показалось странным, почему открытый ключ сертификата ECC принудительно преобразуется в тип RSA):

RSACryptoServiceProvider csp = (RSACryptoServiceProvider)cert.PublicKey.Key Я получил следующее исключение: Алгоритм ключа сертификата не поддерживается.

Далее я наткнулся на этот пост (Импорт сертификата на основе ECC из хранилища сертификатов Windows в CngKey), в котором по сути пытались создать тип CNGKey и создать с его помощью экземпляр ECDsaCng. Однако даже если я смогу сделать это с помощью ECDiffieHellmanCng, в нем нет метода шифрования.

Поэтому я не совсем понимаю, как мне дальше использовать открытый ключ сертификата ECC X509 для шифрования данных.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»