Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline vanesrilax  
#1 Оставлено : 23 декабря 2019 г. 15:40:48(UTC)
vanesrilax

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

Группы: Участники
Зарегистрирован: 17.09.2019(UTC)
Сообщений: 7
Российская Федерация

Поблагодарили: 1 раз в 1 постах
Добрый день! Установил:
КриптоПро CSP 5.0 для Windows
КриптоПро .NET 1.0.7132.0 (NET-x64-rus.msi)
КриптоПро .NET SDK 1.0.7132.0 (NETSDK-x64-rus.msi)

Взял пример с файла DetachedSignature.cs
Импортировал сертификат в хранилище, пытаюсь подписать строку, выдает мне следующее:
Код:
Could not determine signature algorithm for the signer certificate.

Вот мой код:
Код:
using System;
using System.IO;
using System.Security.Cryptography.Pkcs;
using System.Security.Cryptography.X509Certificates;
using System.Text;

namespace MiacCrypto
{
    class SingleSigner
    {
        public void MsgSegner(string msg)
        {
            Console.WriteLine("Полученное сообщение: " + msg);

            Encoding unicode = Encoding.Unicode;
            byte[] msgBytes = unicode.GetBytes(msg);

            X509Certificate2 signerCert = GetSignerCert("ГБУЗ");

            Console.WriteLine(signerCert.Subject);
            try
            {
                byte[] encodedSignature = SingMsg(msgBytes, signerCert);
                File.WriteAllBytes("signature.bin", encodedSignature);
            }
            catch (System.ArgumentNullException ex)
            {

            }
            

        }

        private static byte[] SingMsg(Byte[] msg, X509Certificate2 singleCert)
        {

            ContentInfo contentInfo = new ContentInfo(msg);
            SignedCms signedCms = new SignedCms(contentInfo, true);
            CmsSigner cmsSigner = new CmsSigner(singleCert);

            

            try
            {
                signedCms.ComputeSignature(cmsSigner);
                return signedCms.Encode();
            }
            catch (System.Security.Cryptography.CryptographicException ex)
            {
                Console.WriteLine(ex.Message);
                return null;
            }
            
           
        }

        static X509Certificate2 GetSignerCert(string signerName)
        {
            X509Store storeMy = new X509Store(StoreName.My,
                StoreLocation.LocalMachine);
            storeMy.Open(OpenFlags.ReadOnly);

            Console.WriteLine("Число сертификатов: " + storeMy.Certificates.Count);

            X509Certificate2Collection certColl =
                storeMy.Certificates.Find(X509FindType.FindBySubjectName,
                signerName, false);
            Console.WriteLine(
                "Найдено {0} сертификат(ов) в хранилище {1} для субъекта {2}",
                certColl.Count, storeMy.Name, signerName);

            if (certColl.Count == 0)
            {
                Console.WriteLine(
                    "Сертификат для данного примера не найден " +
                    "в хранилище. Выберите другой сертификат для подписи. ");
                return null;
            }

            storeMy.Close();

            return certColl[0];
        }
    }
}

Сертификат у меня гост 2012
Что я делаю не так?
Заранее большое спасибо!
Offline vanesrilax  
#2 Оставлено : 24 декабря 2019 г. 12:47:18(UTC)
vanesrilax

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

Группы: Участники
Зарегистрирован: 17.09.2019(UTC)
Сообщений: 7
Российская Федерация

Поблагодарили: 1 раз в 1 постах
Если запускать пример через SimpleCS.exe то все работает, что я делаю не так?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.