Как я могу зашифровать данные с помощью открытого ключа из сертификата ECC X509 в .net framework в Windows? ⇐ C#
Как я могу зашифровать данные с помощью открытого ключа из сертификата ECC X509 в .net framework в Windows?
Я использую:
[*]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 для шифрования данных.
Я использую:
[*]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 для шифрования данных.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение