В качестве средства разработки используем Borland C++ (или Visual Studio c++, C#). Создадим dll-библиотеку, выполняющую подпись и верификацию подписи, и с помощью COM-технологии встроим ее в контекстное меню Windows.

Процедура создания подписи:

1. Получаем имя файла при вызове программы.

2. Открываем диалоговое окно, запрашиваем у пользователя имя результирующего подписанного файла и место его расположения.

3. Открываем личное хранилище сертификатов пользователя «My».

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

5. Для подписи файла будем использовать функцию CryptSignMessage. Инициализируем структуру, которая необходима для подписи, в ее поля внесем информацию о сертификате, с помощью которого производится подпись, алгоритм формирования хеш-значения подписанных данных и остальные дополнительные параметры. Параметр fDetachedSignature задает тип получаемой цифровой подписи (отделенная или совмещенная с данными). Мы создаем отделенную подпись, это позволит читать файл без его предварительной расшифровки. Также в этой структуре есть поле-указатель на подписываемые данные. После определения всех параметров структуры, первый раз функцию вызываем для вычисления размера подписи. Затем вызываем эту же самую функцию второй раз с буфером определенного размера, в который и будет помещена созданная подпись.

6. В результирующий файл переписываем исходный файл. Затем записываем размер исходного файла, который понадобится для проверки подписи. Далее записываем имя подписчика и саму подпись и ее длину. Кроме ого, впишем строку «This file is signed» для того, чтобы при проверке можно было точно определить, что проверяется подписанный файл. Функция CryptSignMessage создает подпись в формате PKCS и дает возможность в подпись внести дополнительную информацию, например о сертификате подписчика.

Процедура проверки подписи файла:

1. Открываем файл, считываем последнюю строку, если это строка «This file is signed». Значит, файл подписан и его можно проверять.

2. Считываем длину подписи и саму подпись.

3. Далее считываем имя подписчика.

4. Считываем размер исходных подписанных данных и сами исходные данные. 5. Для проверки подписи будем использовать функцию CryptVerifyDetachedMessageSignature. Одним из входных параметров функции является структура, поля которой содержат извлеченную нами подпись, исходные данные и сертификат подписчика. Сертификат подписчика запрашиваем в каталоге Active Directory.

6. Данная функция при вызове возвращает логическое значение, если оно истинно, значит, подпись верна, и мы сообщаем об этом пользователю.

Для встраивания в контекстное меню создадим небольшой COM-сервер, куда и впишем вышеописанные процедуры. Для того, чтобы программа вызывалась из контекстного меню Windows, необходимо прописать ее регистрацию в реестре операционной системы для любого расширения файлов.

15 лет назад
LiderJob
Иван 
40 лет
17 лет в сервисе
Был
4 года назад

Выбранный исполнитель

opananax
Пушкин 
39 лет
15 лет в сервисе
Был
15 лет назад
15 лет назад
$50
5 дней
Полностью согласен с отрицательным отзывом моего коллеги по несчастью. Исполнитель говорил что все готово и все отлаживает и потом пропал внезапно. На сообщения не отвечает. Понадрал проектов и ни с одним не справился. Крайне неисполнительный фрилансер. Очень подвел.

Заявки фрилансеров

opananax
Пушкин 
39 лет
15 лет в сервисе
Был
15 лет назад
15 лет назад