С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325

Cryptopro Проверка отделённой подписи Unknown algorithm '1.2.643.7.1.1.1.1'

01.07.2024, 23:08. Показов 1229. Ответов 1

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Использую net8.0 и GostCryptography имею ошибку Unknown algorithm '1.2.643.7.1.1.1.1'
C#
1
 signer.CheckSignature(false);//тут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using GostCryptography.Config;
using GostCryptography.Pkcs;
using Org.BouncyCastle.Utilities.IO.Pem;
using System.Security.Cryptography;
using System.Security.Cryptography.Pkcs;
using System.Security.Cryptography.X509Certificates;
 
class Program
{
    static void Main(string[] args)
    {
   
        string pdfFileName = "файл.pdf";
        string signatureFileName = "файл.pdf.sig";
        string filesDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "files");
 
        string pdfFilePath = Path.Combine(filesDirectory, pdfFileName);
        string signatureFilePath = Path.Combine(filesDirectory, signatureFileName);
 
        // Чтение содержимого файлов
        byte[] pdfBytes = File.ReadAllBytes(pdfFilePath);
        string pemData = File.ReadAllText(signatureFilePath);
 
        // Извлечение CMS данных
        PemObject pemObject = new PemReader(new StringReader(pemData)).ReadPemObject();
        byte[] cmsBytes = pemObject.Content;
 
        // Декодирование и проверка подписи
        VerifySignature(pdfBytes, cmsBytes);
    }
 
    static void VerifySignature(byte[] pdfBytes, byte[] cmsBytes)
    {
        // Создание объекта ContentInfo для проверки подписи файла PDF
        ContentInfo contentInfo = new ContentInfo(pdfBytes);
        GostSignedCms signedCms = new GostSignedCms(SubjectIdentifierType.SubjectKeyIdentifier,contentInfo, true);
        signedCms.Decode(cmsBytes);
 
        // Проверяем число основных и дополнительных подписей
        Console.WriteLine();
        Console.WriteLine("Количество подписавших: {0}", signedCms.SignerInfos.Count);
        if (signedCms.SignerInfos.Count == 0)
        {
            Console.WriteLine("Документ не подписан.");
            return;
        }
 
        bool valid = true;
        foreach (SignerInfo signer in signedCms.SignerInfos)
        {
            X509Certificate2 certificate = signer.Certificate;
            if (certificate != null)
                Console.Write("Проверка подписи для подписавшего '{0}'...", certificate.SubjectName.Name);
            else
                Console.Write("Проверка подписи для подписавшего без сертификата...");
 
            try
            {
                signer.CheckSignature(false);
                Console.WriteLine("Успешно.");
            }
            catch (CryptographicException e)
            {
                Console.WriteLine("Ошибка:");
                Console.WriteLine("\t" + e.Message);
                valid = false;
            }
 
            // Проверка соподписей, если есть
            foreach (SignerInfo counterSigner in signer.CounterSignerInfos)
            {
                X509Certificate2 counterCertificate = counterSigner.Certificate;
                if (counterCertificate != null)
                    Console.Write("\tПроверка соподписи для соподписавшего '{0}'...", counterCertificate.SubjectName.Name);
                else
                    Console.Write("\tПроверка соподписи для соподписавшего без сертификата...");
 
                try
                {
                    counterSigner.CheckSignature(false);
                    Console.WriteLine("Успешно.");
                }
                catch (CryptographicException e)
                {
                    Console.WriteLine("Ошибка:");
                    Console.WriteLine("\t\t" + e.Message);
                    valid = false;
                }
            }
        }
 
        Console.WriteLine();
        if (valid)
            Console.WriteLine("Проверка PKCS #7 сообщения завершилась успешно.");
        else
            Console.WriteLine(
            "Проверка PKCS #7 сообщения завершилась неудачно." +
            "Возможно сообщение, одна из подписей, или соподписей " +
            "модифицированы в процессе передачи или хранения. " +
            "Возможно, что не корректен или подменен один из " +
            "сертификатов подписывающих. Возможно подписывающий " +
            "не имеет соответствующих атрибутов для подписи. " +
            "Достоверность и/или целостность сообщения не гарантируется.");
    }
}
задача проверить файл и отделенную подпись из c#, по форуму поискал но ни чего не нашел.

Добавлено через 46 секунд
Количество подписавших : 1
Проверка подписи для подписавшего '{0} тоже работает
Далее ошибка
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.07.2024, 23:08
Ответы с готовыми решениями:

Создание и проверка отделенной (detached) от сообщения PKCS#7 подписи
Здраствуйте! 1. Открываю файл xml 2. Создаю и проверяю отделенную (detached) от сообщения PKCS#7 подпись. 3. Пытаюсь открыть открыть...

Проверка подписи на события
на сервере при получении нового клиента идет подписка на его событие, получается если 10 подключатся, то 10 раз подпишется на событие. как...

Проверка электронной подписи
Приветствую, ребята. Кто может подсказать, как настроить ЭЦП в 1С ? В реестре ключ прописан, но проверку на "сервере" не...

1
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
02.07.2024, 09:55  [ТС]
.NET 8 - doesn't support non-Microsoft hash algorithms, and, may be, assymetric algorithms too. This can be a problem for Russia, Kazakhstan and other countries, where national cryptographic algorithms are obligatory.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.07.2024, 09:55
Помогаю со студенческими работами здесь

Проверка электронной подписи
Ребят,кто может подсказать код для проверки электронной подписи, оооочень нужно)дипломная горит))

Проверка цифровой подписи файлов
Добрый вечер! Нужно сделать программу которая бы проверела подписан ли файл цифровой подпись. Нашел пример по вызову API функции...

Проверка подписи сертификата x.509
Здравствуйте, споткнулся при реализации алгоритма проверки подписи сертификата. Ошибка возникает на этапе «криптования» т.е. openssl...

Проверка подписи методом гаммирования
Доброго времени суток. Не знал где создать тему, но, т.к. нужна программа, хотя вопрос не из той оперы напишу тут (модераторы разберутся :)...

Проверка на наличие цифровой подписи
Доброго времени суток! Пишу на C# программу и возникла проблема: надо проверить файл(ы) на наличие цифровой подписи. Есть ли у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru