Страницы

Поиск по вопросам

вторник, 12 марта 2019 г.

КриптоПро.NET SDK работа с ЭЦП

Как подписать и зашифровать файл используя библиотеку КриптоПро.NET SDK имея USB токен? Алг. подписи ГОСТ 34.10-2001(512 bits) Алг. хэша ГОСТ 34-11-94
Я имею файл в формате p7s.p7m. Его содержимое разделено тегами
----- BEGIN PKCS7 ENCRYPTED ----- --- END PKCS7 ENCRYPTED -----


Ответ

Я решил идти по пути наименьшего сопротивления и использовать консольную утилиту Cyptcp компании КриптоПро. Для работы утилиты нужен криптопровайдер КриптоПро CSP. КриптоПро CSP на одну машине стоит около 2 000 руб, а Cyptcp около 700 руб. Cyptcp и АРМ КриптоПро совместимы между собой.
Формирую команды:
///

/// Формирование команд для утилиты Cyptcp /// public static class Command { /// /// Команда на запуск дешифрования /// /// Имя сертификата /// Путь к защифрованному файлу /// Путь к дешифрованному файлу /// public static string Decript(string nameCertificate, string pathEncryptedFile, string pathSave) { return "-decr -dn \"" + nameCertificate + "\" " +"\""+ pathEncryptedFile + "\" \"" + pathSave+"\""; }
/// /// Проверка подписи. Сертификат выбирается из хранилища сертификатов /// /// Путь к подписанному файлу /// Путь к очищенному от подписи файлу /// public static string VerificationSignature(string pathSignFile, string pathFile) { return "-verify -verall " + "\"" + pathSignFile + "\" \"" + pathFile + "\""; }
public static string Sign(string nameCertificate, string pathFile, string pathSignedFile) { return "-sign -dn \"" + nameCertificate + "\" " + "\"" + pathFile + "\" \"" + pathSignedFile + "\""; }
public static string Encrypt(string nameRecipientCertificate, string pathSigFile, string pathSave) { return "-encr -dn \"" + nameRecipientCertificate + "\" " + "\"" + pathSigFile + "\" \"" + pathSave + "\""; } }
Запуск утилиты на выполнение команды:
private void RunCommand(string command, string pathApplication) { using (Process process = new Process()) { //Имя файла. process.StartInfo.FileName = pathApplication; //Директория. process.StartInfo.WorkingDirectory = Path.GetDirectoryName(pathApplication); //Команда. process.StartInfo.Arguments = command;
//Не показывать окно приложения. process.StartInfo.CreateNoWindow = true; process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.StandardOutputEncoding = Encoding.Default;
process.Start();
//Ответ на диалог выбора сертификата process.StandardInput.WriteLine("y"); } }

Комментариев нет:

Отправить комментарий