Closed Uriel6575 closed 5 years ago
Здравствуйте. Вы можете установить желаемый тип криптопровайдера явно. См. #13.
UPDATE. Тогда не нужно передавать его в конструктор(ы).
Вот как. Значит плохо искал. Прошу прощения. Теперь оно работает, благодарю.
Но тогда мне всё равно немного непонятна суть проблемы. Да, нам нужно зашифровать на сертификат. В сертификате указан OID алгоритма публичного ключа. В системе у нас зарегистрировано два провайдера, которые могут это сделать. Логично, что нужно выбрать какой-то один. Но ведь выходит так, что с использованием ВипНета зашифровать на КриптоПрошный сертификат не получается, раз появляется эта ошибка "Плохой ключ". Зачем тогда эта свобода выбора? Или я не прав?
Да, вы правы. Проблема в том, что некоторые классы .NET Framework, которые выполняют криптографические операции, плохо или совсем не раширяются. В сценарии, который вы описали, так и происходит, только нужный класс создается из "недр" .NET Framework с использованием reflection и нет никакого способа как-то повлиять на этот процесс. Поэтому в некоторых сценариях "свобода выбора" (явное указание криптопровайдера), к сожалению, не работает. В целом это было сделано по двум причинам: 1) чтобы избавиться от hardcoded идентификаторов криптопровайдеров; 2) на будущее :) Наконец, есть ряд отличий при работе с VipNet и CryptoPro, которые проявляются при работе с ключами.
В общем выяснилось, что ошибка "Плохой ключ" возникает только если явно передавать тип провайдера через конструкторы. При задании его в GostCryptoConfig'е всё без проблем шифруется обоими криптопровайдерами друг на друга по всем вариантам ГОСТов. Так что смешивать конфиг и явное задание типов нельзя.
День добрый.
Просто хотелось бы уточнить: проверялась ли работа библиотеки при одновременной установке в системе обоих криптопровайдеров?
При следующем вызове:
У меня возникает вот такая ситуация:
Причём речь идёт только про КриптоПро. ВипНет работает без проблем. Если удалить ВипНет из системы, то начинает работать и КриптоПро. 2001 или 2012 ГОСТ значения не имеет.