Open frantic0589 opened 5 years ago
Здравствуйте. Библиотека представляет собой обёртку над криптопровайдером - CryptoPro или VipNet. Т.е. реализует часть абстракций из System.Security.Cryptography на базе этих криптопровайдеров. Соответственно, в большинстве случаев нужно наличие установленного CryptoPro или VipNet. Можете привести пример кода, который возвращает исключение?
Сам метод Decode(fileName) возвращает ошибку.
В случае, если криптопровайдер не установлен?
Нет, даже когда установлен.
Я постараюсь воспроизвести ошибку. Пока могу предложить посмотреть примеры, может что-то удастся найти https://github.com/AlexMAS/GostCryptography/tree/master/Source/GostCryptography.Tests/Pkcs
Проверил на своей машине, все должно работать. Сертификат установлен нормально? Может проблема с поиском самого сертификата.
Сам метод Decode(fileName) возвращает ошибку.
Не могу найти такую перегрузку.
Сертификат в данном случае не нужен. Метод декодирует зашифрованное сообщение.
Видимо, мы говорим про разные вещи. Можете всё-таки привести пример кода.
Ну в принципе я уже выше писал: GostSignedCms gostSignedCms = new GostSignedCms(); gostSignedCms.Decode(fileName); В fileName массив байтов файла bin или p7s
Я попробовал возможные варианты, но не могу получить подобного исключения. На основе этого есть предположение, что проблема с данными. Вы уверены, что с ними все нормально? Как вы получаете быйты для декодирования? Согласно примеру, который вы привели, содержимое сообщения должно быть включено (detached=false
).
В этой версии также есть одна особенность, нужно явно установить тип криптопровайдера. В вашем случае это не должно играть роли, тем не менее:
// ViPNet CSP (by default)
GostCryptoConfig.ProviderType = ProviderTypes.VipNet;
// CryptoPro CSP
GostCryptoConfig.ProviderType = ProviderTypes.CryptoPro;
Для информации.
Выпустил v2.0.0, которая включает поддержку алгоритмов 2012
года, а также исправление известных ошибок совместимости с ViPNet CSP 4.2
. Версия была протестирована на конфигурациях:
В случае с CryptoPro CSP
важно установить версию не ниже 4.0.9963
(на момент тестирования последний private-релиз), поскольку она содержит исправление критической ошибки при работе с сертификатами ГОСТ Р 34.10-2012/1024
.
Также нужно отметить, что ViPNet CSP
до последней на данный момент версии 4.2.8.51670
(включительно) не поддерживает создание производных симметричных ключей на основе хэш-функций ГОСТ Р 34.11-2012
. Ничего критичного в этом нет, это оказывает влияние только на возможность генереции случайных симметричных ключей с использованием методов Gost_R3411_2012_256_PRF.DeriveKey()
и Gost_R3411_2012_512_PRF.DeriveKey()
.
Наконец, в ходе добавления поддержки алгоритмов 2012
года были произведены крупные изменения, включающие перенос/переименование существующих классов. Для перехода с v1.0
на v2.0
нужно воспользоваться следующей иструкцией.
@frantic0589 Здравствуйте. Получилось решить проблему?
@AlexMAS Добрый день. К сожалению пока нет.
@frantic0589, а вы пробовали проверять подпись с помощью утилиты cryptcp от Крипто-Про? Скорее всего, что-то не так с подписью в файле.
А причем здесь вообще КриптоПро или любой другой криптопровайдер? Сообщение в формате Pkcs7 декодируется из структуры ASN.1. Вы же не подпись у сообщения проверяете и не расшифровываете его. Вангую, что формат сообщения не соответствует указываемому формату при декодировании. Лучше воспользоваться Certenroll API.
@frantic0589 Получилось решить проблему? :)
К сожалению нет. Вы спрашивали при чем здесь криптопровайдер, сообщение закодировано по РФ ГОСТу. Windows без криптопро не знает про наш ГОСТ. И только после установки криптопровайдер в реест записывается значения типа хэш и ключ, после чего он может по нашему ГОСТу шифровать и читать эти сообщения.
@frantic0589 Правильно ли я понимаю, что указанная вами ошибка возникает только когда не установлен криптопровайдер?
Идет подмена понятий. Сообщение м.б.зашифровано по ГОСТу, а не закодировано. По ГОСТу также может быть вычислена эцп или хэш. ASN.1 это формат кодирования сообщения
Добрый день. Для работы требуется установленное КриптоПРО CSP на ПК, или вся информация об OID и ключах шифрования тут имеется? Пытаюсь декодировать зашифрованный файл с подписью: GostSignedCms gostSignedCms = new GostSignedCms(); gostSignedCms.Decode(fileName);
Получаю ошибку: "System.Security.Cryptography.CryptographicException: Недопустимый тип криптографического сообщения."
С установленным криптопро csp и стандартным классом .net EnvelopedCms все удается сделать. Но имеется необходимость сделать реализацию без установленного криптопро, чтобы можно было опубликовать приложение в вэб, без установленного криптопро, в котором имеется вся информация по алгоритмам шифрования: https://cpdn.cryptopro.ru/content/csp40/html/group___pro_c_s_p_ex_DP8.html