Меню

Ошибка недопустимый тип криптографического сообщения

@frantic0589

Добрый день. Для работы требуется установленное КриптоПРО 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

@AlexMAS

Здравствуйте. Библиотека представляет собой обёртку над криптопровайдером — CryptoPro или VipNet. Т.е. реализует часть абстракций из System.Security.Cryptography на базе этих криптопровайдеров. Соответственно, в большинстве случаев нужно наличие установленного CryptoPro или VipNet. Можете привести пример кода, который возвращает исключение?

@frantic0589

Сам метод Decode(fileName) возвращает ошибку.

@AlexMAS

В случае, если криптопровайдер не установлен?

@frantic0589

Нет, даже когда установлен.

@AlexMAS

@AlexMAS

Проверил на своей машине, все должно работать. Сертификат установлен нормально? Может проблема с поиском самого сертификата.

Сам метод Decode(fileName) возвращает ошибку.

Не могу найти такую перегрузку.

@frantic0589

Сертификат в данном случае не нужен. Метод декодирует зашифрованное сообщение.

@AlexMAS

Видимо, мы говорим про разные вещи. Можете всё-таки привести пример кода.

@frantic0589

Ну в принципе я уже выше писал:
GostSignedCms gostSignedCms = new GostSignedCms();
gostSignedCms.Decode(fileName);
В fileName массив байтов файла bin или p7s

@AlexMAS

Я попробовал возможные варианты, но не могу получить подобного исключения. На основе этого есть предположение, что проблема с данными. Вы уверены, что с ними все нормально? Как вы получаете быйты для декодирования? Согласно примеру, который вы привели, содержимое сообщения должно быть включено (detached=false).

В этой версии также есть одна особенность, нужно явно установить тип криптопровайдера. В вашем случае это не должно играть роли, тем не менее:

// ViPNet CSP (by default)
GostCryptoConfig.ProviderType = ProviderTypes.VipNet;

// CryptoPro CSP
GostCryptoConfig.ProviderType = ProviderTypes.CryptoPro;

@AlexMAS

Для информации.

Выпустил v2.0.0, которая включает поддержку алгоритмов 2012 года, а также исправление известных ошибок совместимости с ViPNet CSP 4.2. Версия была протестирована на конфигурациях:

  • Windows 10 x64, CryptoPro CSP 4.0.9963
  • Windows 10 x64, ViPNet CSP 4.2.8.51670

В случае с 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 нужно воспользоваться следующей иструкцией.

@AlexMAS

@frantic0589

@AlexMAS Добрый день. К сожалению пока нет.

@Bykiev

@frantic0589, а вы пробовали проверять подпись с помощью утилиты cryptcp от Крипто-Про? Скорее всего, что-то не так с подписью в файле.

@avragov

А причем здесь вообще КриптоПро или любой другой криптопровайдер?
Сообщение в формате Pkcs7 декодируется из структуры ASN.1. Вы же не подпись у сообщения проверяете и не расшифровываете его.
Вангую, что формат сообщения не соответствует указываемому формату при декодировании.
Лучше воспользоваться Certenroll API.

@AlexMAS

@frantic0589

К сожалению нет. Вы спрашивали при чем здесь криптопровайдер, сообщение закодировано по РФ ГОСТу. Windows без криптопро не знает про наш ГОСТ. И только после установки криптопровайдер в реест записывается значения типа хэш и ключ, после чего он может по нашему ГОСТу шифровать и читать эти сообщения.

@AlexMAS

@frantic0589 Правильно ли я понимаю, что указанная вами ошибка возникает только когда не установлен криптопровайдер?

@avragov

Идет подмена понятий. Сообщение м.б.зашифровано по ГОСТу, а не закодировано. По ГОСТу также может быть вычислена эцп или хэш. ASN.1 это формат кодирования сообщения

Форум КриптоПро
 » 
Устаревшие продукты
 » 
КриптоПро CSP 3.0
 » 
Недопустимый тип криптографического сообщения


Offline

Хаджимурат

 


#1
Оставлено
:

10 июня 2009 г. 21:43:41(UTC)

Хаджимурат

Статус: Новичок

Группы: Участники

Зарегистрирован: 10.06.2009(UTC)
Сообщений: 1

Возникает при проверке цифровой подписи.
Причем на одном компьютере проверяет понрмально.
Мало того на том компе где проверку не проходит другие файлы подписанные таким же образом проверку проходят
файл не битый- проверил


Вверх


Offline

IvanZzz

 


#2
Оставлено
:

10 июня 2009 г. 21:50:41(UTC)

IvanZzz

Статус: Активный участник

Группы: Участники

Зарегистрирован: 23.04.2008(UTC)
Сообщений: 519
Мужчина
Откуда: Крипто-Про

«Недопустимый тип криптографического сообщения.» При проверки какими сред-вами возникает такое сообщение. Скорей всего, вам нужно обращатсья к разработчикам этого ПО.


Вверх

Пользователи, просматривающие эту тему

Guest

Форум КриптоПро
 » 
Устаревшие продукты
 » 
КриптоПро CSP 3.0
 » 
Недопустимый тип криптографического сообщения

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.


Offline

Даниленко Денис

 


#1
Оставлено
:

26 июля 2017 г. 11:28:59(UTC)

Даниленко Денис

Статус: Активный участник

Группы: Участники

Зарегистрирован: 31.03.2017(UTC)
Сообщений: 46
Мужчина
Российская Федерация
Откуда: Хабаровск

Сказал «Спасибо»: 12 раз
Поблагодарили: 1 раз в 1 постах

Здравствуйте!

При проверке подписи на сервере, с помощью расширения для PHP, возможны различные ошибки.
Например, когда подпись или цепочка не корректны. Когда подпись повреждена и тд. (все ошибки функции Verify).

Собрал некоторые из ошибок. Но хотелось бы иметь в арсенале все.

Код:

                    case '0x800B010A':
                        $result = 'Не удается построить цепочку сертификатов для доверенного корневого центра (0x800B010A)';
                        break;
                    case '0x80091004':
                        $result = 'Недопустимый тип криптографического сообщения (0x80091004)';
                        break;
                    case '0x80090006':
                        $result = 'Неправильная подпись (0x80090006)'; // Неверный тип подписи
                        break;
                    case '0x80070057':
                        $result = 'Неверный параметр. (0x80070057)'; // The parameter is incorrect
                        break;
                    case '0x800B010C':
                        $result = 'Ваш сертификат был отозван создателем. (0x800B010C)'; // Internal error.
                        break;

Требуется для того, что расширение для PHP выводит ошибку по англ. + ее код.
Я же в своем проекте делаю вывод данных ошибок пользователю на русском языке.

Вопрос заключается в том, можно ли где-то получить полный список всех возможных ошибок?

Причем требуется, чтобы хотябы на англ.языке но ошибки описывались.
Тоесть например код ошибки = 0x800B010C означает в расширении — Internal error. Что не совсем корректное описание.

Отредактировано пользователем 26 июля 2017 г. 11:31:30(UTC)
 | Причина: Не указана


Вверх

WWW


Offline

Андрей Емельянов

 


#2
Оставлено
:

28 июля 2017 г. 14:34:50(UTC)

Андрей Емельянов

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 11.03.2013(UTC)
Сообщений: 805
Мужчина
Российская Федерация
Откуда: Оттуда

Сказал «Спасибо»: 4 раз
Поблагодарили: 148 раз в 144 постах

Добрый день.
Такой базы ошибок отдельно у нас нет. Основная часть ошибок, которые возвращаем, описана на MSDN (https://msdn.microsoft.com). Ошибки, которые могут вернуть наши библиотеки клиентов tspcli и ocspcli описаны здесь:
http://cpdn.cryptopro.ru…ent/cades/dllerrors.html

Отредактировано пользователем 28 июля 2017 г. 14:35:30(UTC)
 | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Наша страничка в Instagram


Вверх

thanks 1 пользователь поблагодарил Андрей Емельянов за этот пост.

Даниленко Денис

оставлено 28.07.2017(UTC)


Offline

Даниленко Денис

 


#3
Оставлено
:

28 июля 2017 г. 15:14:07(UTC)

Даниленко Денис

Статус: Активный участник

Группы: Участники

Зарегистрирован: 31.03.2017(UTC)
Сообщений: 46
Мужчина
Российская Федерация
Откуда: Хабаровск

Сказал «Спасибо»: 12 раз
Поблагодарили: 1 раз в 1 постах

Автор: eav Перейти к цитате

Добрый день.
Такой базы ошибок отдельно у нас нет. Основная часть ошибок, которые возвращаем, описана на MSDN (https://msdn.microsoft.com). Ошибки, которые могут вернуть наши библиотеки клиентов tspcli и ocspcli описаны здесь:
http://cpdn.cryptopro.ru…ent/cades/dllerrors.html

Хорошо, понял Вас! СпасибоAngel


Вверх

WWW


Offline

IGORPzzz

 


#4
Оставлено
:

29 сентября 2018 г. 10:48:51(UTC)

IGORPzzz

Статус: Участник

Группы: Участники

Зарегистрирован: 28.09.2018(UTC)
Сообщений: 25
Российская Федерация
Откуда: Moscow

Сказал(а) «Спасибо»: 1 раз

А вот метод который инициализирует все это дело

Код:


    public function execute()
    {
        $task = $this->taskManagement->GetNextJob();

        if (empty($task))
            return false;

        if (file_exists($task['file_root'])){
            $this->signatureService->query = $task['query'];
            
            $content = base64_encode(file_get_contents('/home/admin/web/48270.vps.local/public_html/content/files/photo.jpg'));//$task['file_root']
           
            $this->signatureService->findType = (int)$task['encoding_type'];
            $this->signatureService->setContent($content);
            $this->signatureService->sign();
        }
    }


Вверх

Пользователи, просматривающие эту тему

Guest

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

    public byte[] DoEncrypt(string message, X509Certificate2 cryptCert)
    {
        byte[] signedBytes = new System.Text.UTF8Encoding().GetBytes(message);
        EnvelopedCms encryptedMessage = new EnvelopedCms(new ContentInfo(signedBytes));

        CmsRecipientCollection recipients = new CmsRecipientCollection();

            CmsRecipient recipient = new CmsRecipient(cryptCert);
            recipients.Add(recipient);


        encryptedMessage.Encrypt(recipient);

        return encryptedMessage.Encode();
    }

When my application tries to encrypt a message it throws the exception ‘encryptedMessage.RecipientInfos’ threw an exception of type ‘System.Security.Cryptography.CryptographicException’ with the text «Invalid cryptographic message type» occurs in the line «encryptedMessage.Encrypt(recipient)»

John Saunders's user avatar

John Saunders

160k26 gold badges239 silver badges393 bronze badges

asked Dec 3, 2010 at 2:00

Jorge Gil's user avatar

If you are actually encrypting signed data (as the variable names suggests), you should not use the default content type for your ContentInfo. Instead you should use the alternative constructor that allows you to specify the signedData content type.

answered Dec 3, 2010 at 6:53

Rasmus Faber's user avatar

Rasmus FaberRasmus Faber

48.1k21 gold badges141 silver badges189 bronze badges

0

    public byte[] DoEncrypt(string message, X509Certificate2 cryptCert)
    {
        byte[] signedBytes = new System.Text.UTF8Encoding().GetBytes(message);
        EnvelopedCms encryptedMessage = new EnvelopedCms(new ContentInfo(signedBytes));

        CmsRecipientCollection recipients = new CmsRecipientCollection();

            CmsRecipient recipient = new CmsRecipient(cryptCert);
            recipients.Add(recipient);


        encryptedMessage.Encrypt(recipient);

        return encryptedMessage.Encode();
    }

When my application tries to encrypt a message it throws the exception ‘encryptedMessage.RecipientInfos’ threw an exception of type ‘System.Security.Cryptography.CryptographicException’ with the text «Invalid cryptographic message type» occurs in the line «encryptedMessage.Encrypt(recipient)»

John Saunders's user avatar

John Saunders

160k26 gold badges239 silver badges393 bronze badges

asked Dec 3, 2010 at 2:00

Jorge Gil's user avatar

If you are actually encrypting signed data (as the variable names suggests), you should not use the default content type for your ContentInfo. Instead you should use the alternative constructor that allows you to specify the signedData content type.

answered Dec 3, 2010 at 6:53

Rasmus Faber's user avatar

Rasmus FaberRasmus Faber

48.1k21 gold badges141 silver badges189 bronze badges

0

Recommend Projects

  • React photo

    React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo

    Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo

    Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo

    TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo

    Django

    The Web framework for perfectionists with deadlines.

  • Laravel photo

    Laravel

    A PHP framework for web artisans

  • D3 photo

    D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Visualization

    Some thing interesting about visualization, use data art

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo

    Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo

    Microsoft

    Open source projects and samples from Microsoft.

  • Google photo

    Google

    Google ❤️ Open Source for everyone.

  • Alibaba photo

    Alibaba

    Alibaba Open Source for everyone

  • D3 photo

    D3

    Data-Driven Documents codes.

  • Tencent photo

    Tencent

    China tencent open source team.

    public byte[] DoEncrypt(string message, X509Certificate2 cryptCert)
    {
        byte[] signedBytes = new System.Text.UTF8Encoding().GetBytes(message);
        EnvelopedCms encryptedMessage = new EnvelopedCms(new ContentInfo(signedBytes));

        CmsRecipientCollection recipients = new CmsRecipientCollection();

            CmsRecipient recipient = new CmsRecipient(cryptCert);
            recipients.Add(recipient);


        encryptedMessage.Encrypt(recipient);

        return encryptedMessage.Encode();
    }

Когда мое приложение пытается зашифровать сообщение, оно выдает исключение «encryptedMessage.RecipientInfos», выдает исключение типа «System.Security.Cryptography.CryptographicException» с текстом «Недопустимый тип криптографического сообщения» в строке «encryptedMessage.Encrypt(recipient )»

1 ответы

Если вы на самом деле шифруете подписанные данные (как следует из имен переменных), вам не следует использовать тип контента по умолчанию для вашего ContentInfo. Вместо этого вы должны использовать альтернативный конструктор который позволяет указать тип содержимого signedData.

ответ дан 03 дек ’10, 06:12

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками

asp.net
encryption
cryptography

or задайте свой вопрос.

Ошибка при распаковке криптографического сообщения

Если после отправки декларации в протоколе обработки появляется ошибка Ошибка при распаковке криптографического сообщения,

выполните следующие действия:

  1. Установите сертификата Росалкогольрегулирования по инструкции
  2. Убедитесь, что в хранилище Другие пользователи установлены сертификаты Росалкогольрегулирования и Субъекта. Для этого:
    • пройдите по пути ПускПанель управленияСвойства обозревателя
    • в Свойствах обозревателя откройте вкладку Содержание, нажмите Сертификаты
    • в открывшемся окне нажмите Другие пользователи, убедитесь, что в списке сертификатов присутствует сертификат Росалкогольрегулирования и сертификат Субъекта. Откройте каждый сертификат, срок действия сертификатов должен быть действительным. 
    • если оба или один из сертификатов не установлен (не действителен)  — установите их/его с помощью одной из инструкций.
  3. Зашифруйте и подпишите файл декларации заново, соблюдая инструкцию Подписание и шифрование файла для Росалкогольрегулирования.
    Ошибка чаще всего связана с нарушением процедуры подписания.
    При повторном шифровании и подписании декларации, обратите внимание на следующие шаги:
     — Параметры подписи (пункт 6). Галочки должны быть выставлены согласно скриншоту в инструкции: если у вас нет необходимой галочки – добавьте, если стоят лишние – уберите лишнее.
     — Выходной формат файла (пункт 10). Точки должны стоять согласно скриншоту, в ином случае файл не будет заархивирован по требованиям ФСРАР.
     — Выбор файлов (пункт 11). Обратите внимание, что на данном пункте не выбирается декларация для шифрования, поскольку в заголовке представлено, что файл будет создан без создания подписи. На данном шаге нажимается кнопка Далее и не выбирается декларация.
    Выбор сертификатов получателей (пункт 13). Среди сертификатов получателей могут быть только сертификаты Органа исполнительной власти субъекта и ФСРАР — в данном списке нельзя выбирать сертификат отправителя (выданный на вашу организацию/ИП).
  4. Внимание! Имя файла декларации должно отличаться от имени отправленной ранее декларации.
    В окне выбора сертификатов получателей необходимо выбирать два сертификата: сертификат Субъекта и сертификат Росалкогольрегулирования 

  5. Повторно отправьте файл декларации в контролирующие органы.

Вы определились с выбором?

Перейти к оформлению заказа

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка незакрытой дверцы стиральной машины самсунг
  • Ошибка недопустимый объект гиперссылки как исправить