Статус: Участник
Группы: Участники
Зарегистрирован: 09.11.2020(UTC) Сообщений: 10  Откуда: СПБ Сказал(а) «Спасибо»: 3 раз
|
Добрый день. Пытаюсь создать открепленную подпись с использованием КриптоПро .NET В результате получается файл подписи, который не проходит валидацию стандартными средствами через приложение "Инструменты КриптоПро". Также замечено, что размер файла, создаваемого написанной программой примерно в 1.5 раза превышает размер файл открепленной подписи, которая создается с помощью "Инструментов КриптоПро". И если открыть файл в текстовом редакторе, там конечно ничего не понятно, но видно, что некоторые блоки повторяются...
Вот код:
using System; using System.IO; using System.Security.Cryptography; using System.Security.Cryptography.Pkcs; using System.Security.Cryptography.X509Certificates; using System.Text;
namespace CryptoProSigner2 { class Program { [STAThread] static void Main(string[] args) { string inputString = args[0]; string certSerial = args[1]; bool detached = args[2] == "detached"; X509Certificate2 signerCert = GetSignerCert(certSerial); if (signerCert == null) { Console.Write("certificate not found"); return; } Encoding unicode = Encoding.Unicode; byte[] bytes = unicode.GetBytes(inputString);
ContentInfo contentInfo = new ContentInfo(bytes); SignedCms signedCms = new SignedCms(contentInfo, detached); CmsSigner cmsSigner = new CmsSigner(signerCert); signedCms.ComputeSignature(cmsSigner); byte[] signedData = signedCms.Encode(); string filename = detached ? "detached.p7s" : "attached.p7s"; File.WriteAllBytes("e:\\temp\\crypto\\" + filename, signedData); } static X509Certificate2 GetSignerCert(string certSerial) { X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly); X509Certificate2 ret = null; foreach (X509Certificate2 cer in store.Certificates) { if (cer.SerialNumber.Equals(certSerial)) { ret = cer; break; } } store.Close(); return ret; } } }
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,513   Сказал «Спасибо»: 554 раз Поблагодарили: 2252 раз в 1757 постах
|
Здравствуйте. Раз в полгода...
inputString - читать из файла, File.ReadAllBytes...
Тогда не будет проблем.
|
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,513   Сказал «Спасибо»: 554 раз Поблагодарили: 2252 раз в 1757 постах
|
Простой пример - работа с ФНС и требование для xml файлов - ANSI.
Если подписывать строку как utf8 (в тесте из консоли) - не будет подпись проверяться (т.к. в файле - ANSI). |
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Полтора или 1.33? 1.33 похоже на кодировку Base64 (представление двоичных данных печатными текстовыми символами, получаемый файл начинается с MIA... или MII...), просто декодируйте из нее, если нужно чистые DER данные (файл начинается с байта 0x30 который виден в блокноте как 0). Еще может быть отличие по количеству включаемых сертификатов, что влияет на размер. Отредактировано пользователем 30 ноября 2020 г. 11:22:33(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.11.2020(UTC) Сообщений: 10  Откуда: СПБ Сказал(а) «Спасибо»: 3 раз
|
Поменял byte[] bytes = unicode.GetBytes(inputString); на byte[] bytes = File.ReadAllBytes(filename);
Безрезультатно.
В base64 даже не понимаю какая строка кода могла бы в нее кодировать...
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.11.2020(UTC) Сообщений: 10  Откуда: СПБ Сказал(а) «Спасибо»: 3 раз
|
Я нажал два раза на файле p7s с корректной подписью, созданной с помощью Инструментов КриптоПро. Открылась оснастка certmgr, показывающая сертификаты. И там один сертификат, выданный компании Эдисофтом.
А когда то же самой делаю для файла подписи, сгенерированного программой, открывается оснастка и в ней два сертификата. Первый - тот же Эдисофтовский, а второй - от Минкомсвязи, выданный Эдисофту. Как этот хвост прицепился?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.11.2020(UTC) Сообщений: 10  Откуда: СПБ Сказал(а) «Спасибо»: 3 раз
|
Самое интересное, что обе подписи проверяются сторонним сервисом проверки ЭЦП успешно. Может тогда просто пренебречь тем, что софт Криптопро и самописная программа NET возвращают открепленные подписи разной длины и содержания?
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
|
 1 пользователь поблагодарил two_oceans за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.11.2020(UTC) Сообщений: 10  Откуда: СПБ Сказал(а) «Спасибо»: 3 раз
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close