Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
2 / 1 / 1
Регистрация: 13.04.2020
Сообщений: 12

Создание ЭЦП через Crypt API (win32crypt) + КриптоПро CSP (v4.0)

02.08.2024, 10:20. Показов 3089. Ответов 3

Студворк — интернет-сервис помощи студентам
Приветствую!
Прошу помощи по следующему вопросу.
Имеется Токен, установлен КриптоПро CSP версии 4.0
Задача такая. Пытаюсь с помощью python написать программку, которая будет производить создание ЭЦП по текущими токену.
Почитав информацию, вышло следующее. Чтобы создать ЭЦП, необходимо иметь криптопровайдер (он есть, КриптоПро CSP).
К этому криптопровайдеру надо как-то обратиться через MS crypt API (в данном случае у меня win32crypt, так как модуль делается на питоне, чтоб его...).
Вот и вопрос.
Куда копать? Информацию какую не посмотрю, все упираюсь в что-то. Весь код везде идет на С. С питоном словно вообще невозможно сделать подобного уровня программу. Также не понимаю как коннектнуться с ms api на криптопро csp. Как вообще это сделать в питоне? Методы гляжу, толкового ничего в голову не идет.
Что делать, подскажите?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.08.2024, 10:20
Ответы с готовыми решениями:

КриптоПРО ЭЦП и Lotus Notes
Кто нибудь сталкивался с интеграцией КриптоПРО ЭЦП в IBM Lotus Notes? Как это примерно выглядит? Лучше всего на пальцах объяснить, до...

Подключить КриптоПро ЭЦП Browser plug-in к webBrowser
Подскажите такой вопрос, на форме есть webBrowser1 как подключить КриптоПро ЭЦП Browser plug-in, на компе все установлено и Крипто Про...

Как в 1с подключить браузерный плагин КриптоПро ЭЦП Browser plug-in?
Как в 1с подключить браузерный плагин КриптоПро ЭЦП Browser plug-in? Он подключается вроде как в функции ПодключитьВнешнююКомпоненту. Но...

3
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
02.08.2024, 15:50
Лучший ответ Сообщение было отмечено Tungusovich как решение

Решение

Я где-то находил библиотеку на питоне для работы с КриптоПро CSP. Не знаю насколько рабочая. (Не обновлялась 5 лет: https://github.com/Keyintegrity/pycryptoprosdk)

Я даже пытался по образу и подобию её писать на сишечке…

В итоге плюнули и написали на С# (потребуется установить КриптоПро .NET, но он бесплатный и, как ответила техподдержка, не являеся СКЗИ сам по себе.

Так мой вам совет: берите КриптоПро .NET, .NET Framework 2.0+ (на .NET Core не работает!!!) и пишите на C#.
1
2 / 1 / 1
Регистрация: 13.04.2020
Сообщений: 12
02.08.2024, 22:10  [ТС]
Да, тоже видел данную библиотеку. Не сказал бы, что на данный момент рабочая, пробовал.

По итогу пытался сделать через win32crypt, вроде что-то получатся началось, но с большими трудностями.
Документации как таковой нет. Только часть учебников, где хоть и расписывается принцип работы методов и пр., но все написано было на С, под винду XP и 2003. (Учебники начала нулевых).
Вообще материал там интересно представлен, с примерами, но все же не сильно помогают при работе.
Так как есть различия.

Посмотрел КриптоПро .NET, исходя из описания - действительно то что нужно, не надо будет через одно апи к CSP обращаться и там ещё работать, когда уже есть .NET со своими методами для КриптоПро. Так что в понедельник на работе буду пробовать)

Эх... Как не любил python просто потому что. Все также не люблю. Понимаю преимущества языка, но как же все же работать с С++/С# (основные для меня) удобнее и проще. (ИМХО)

Спасибо за ответ!
0
2 / 1 / 1
Регистрация: 13.04.2020
Сообщений: 12
06.08.2024, 08:38  [ТС]
Спустя пару дней работы и пару-тройку вопросов на форуме КриптоПро, все же собрал действующий вариант.
Подписывает документ (тут пока пресно сделан выбор файла - так как мне просто нужно было проверить работу модуля) подписью CMS в виде *.sig файла. Напишу код сюда, вдруг кому-то когда-то потребуется.

Получается квалифицированная электронная подпись формата CMS.

Опишу подробно:
1) Используется ЭЦП в виде USB-накопителя от Рутокена. Присоединяется в USB-слот.

2) На компе должно быть установлено следующее:
2.1) КриптоПро CSP (у меня версия 4.0), главное 4.0 и выше, насчет 3.6 сказать не могу, тут точно не помню информацию с сайта КриптоПро.
2.2) Установить КриптоПро .NET
2.3) Установить КриптоПро SDK

3) Запустить Visual Srudio (Не стал писать в VS:C, так как для c# VS удобнее) и подключить ссылки у проекта.
3.1) Там добавить System.Security и в ссылки -> Добавить ссылку -> Обзор -> Папка КриптоПро SDK -> файл CryptoPro.Sharpei.Base.dll

4) Ну и код:

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
using System;
using System.IO;
using System.Security.Cryptography;
using System.Security.Cryptography.Pkcs;
using CryptoPro.Sharpei;
 
 
namespace CryptoProModule
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Начало операции");
 
            string filename = @"C:\Users\Tungusovich\Desktop\Test 2.pdf";
            SignOfficeDocument(filename);
 
            Console.WriteLine("Операция завершена!");
        }
 
        static void SignOfficeDocument(string path)
        {
            CspParameters parameters = new CspParameters(80,
                "Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider",
                @"Макси******************");
 
            // Объект, реализующий алгоритм вычисления подписи.
            Gost3410_2012_256CryptoServiceProvider Gost = new Gost3410_2012_256CryptoServiceProvider(parameters);
 
            byte[] signature;
 
            // Открываем для чтения:
            using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.None))
            {
                byte[] data = new byte[fs.Length];
                fs.ReadAsync(data, 0, data.Length);
 
                using (var gostCert = Gost.ContainerCertificate)
                {
                    var contentInfo = new ContentInfo(data);
                    var signedCms = new SignedCms(contentInfo, true);
                    CmsSigner cmsSigner = new CmsSigner(gostCert);
                    signedCms.ComputeSignature(cmsSigner);
                    signature = signedCms.Encode();
                    Console.WriteLine($"CMS Sign: {Convert.ToBase64String(signature)}");
                }
                
            }
 
            string baseString = Convert.ToBase64String(signature);
            File.WriteAllText(@"C:\Users\Tungusovich\Desktop\Подпись.pdf.sig", baseString);
        }
    }
}
В cspParameters 80 - тип криптопроводника (можно узнать в Win + R -> regedit -> HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cr yptography\Defaults\Provider Types
Там написано нужное. Я делал по Госту 34.10.2012 (256 бит, который), у меня на ПК он идет 80.

Написал специально достаточно подробно и разжевано, вдруг кто не будет понимать, что да как, люди разные. Код приложил.

Ну и проверять подпись рекомендую на сайте ГосУслуг: https://e-trust.gosuslugi.ru/#/portal/sig-check
Проверка отсоединенной ЭП (CMS)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.08.2024, 08:38
Помогаю со студенческими работами здесь

КриптоПро через консоль в Лотусе
Начальство поставило задачу сделать сертифицированное криптование в Лотусе с помощью КриптоПро. Поскольку криптование должно быть...

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

Создание класса через Reflection API
Задача - необходимо составить с помощью JavaReflectionApi класс вида: public class ExampleClass { public static final String...

КриптоПро, создание/получение сертификата и ключа, простановка подписи на PDF
Привет. Ни когда не работал с КриптоПро, скажите пожалуйста, у меня нет ничего сейчас. Нужно создать ключ, с помощью которого нужно...

Создание группы и БАН через API Вконтакте
Проблема в создании группы в Вконтакте через API, скрипт уже написан. Авторизация проходит, создаем пустую группу через API VK с помощью...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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 с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru