Статус: Новичок
Группы: Участники
Зарегистрирован: 18.03.2014(UTC) Сообщений: 6  Сказал(а) «Спасибо»: 2 раз
|
Создаю подпись Цитата: byte[] data = System.Text.Encoding.UTF8.GetBytes(xmldata.XML); // Формируем коллекцию отображаемых сертификатов. X509Store store = new X509Store("MY", StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
// Отображаем окно выбора сертификата. X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(collection, "Выбор секретного ключа по сертификату", "Выберите сертификат соответствующий Вашему секретному ключу.", X509SelectionFlag.SingleSelection);
// Проверяем, что выбран сертификат if (scollection.Count == 0) { Console.WriteLine("Не выбран ни один сертификат."); return null; }
// Выбран может быть только один сертификат. X509Certificate2 found = scollection[0];
Gost3410CryptoServiceProvider prov = (Gost3410CryptoServiceProvider)found.PrivateKey;
// Объект, реализующий алгоритм хэширования. Gost3411CryptoServiceProvider myhash = new Gost3411CryptoServiceProvider();
using (MemoryStream stream = new MemoryStream(data)) { myhash.ComputeHash(stream); } byte[] signature1 = prov.SignHash(myhash.Hash); string sign = Convert.ToBase64String(signature1);
Переменную sign записываю в файл 1111.crt. Только данная переменная сейчас в формате Base64, как сделать кодировку DER. При проверке в КриптоАРМ выдает сообщение "Расшифрованный файл не является подписью (0x80070057)"
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,512   Сказал «Спасибо»: 554 раз Поблагодарили: 2251 раз в 1756 постах
|
Ответ: не использовать конвертирование в base64. убрать из кода: Convert.ToBase64String как записать byte[] в файл - написано в учебнике (MSDN).
P.s. Надеюсь Вам известно, что делает SignHash. И какой на выходе результат.
|
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 18.03.2014(UTC) Сообщений: 6  Сказал(а) «Спасибо»: 2 раз
|
Цитата:using (MemoryStream stream = new MemoryStream(data)) { myhash.ComputeHash(stream); } byte[] signature1 = prov.SignHash(myhash.Hash);
ZipFile x = new ZipFile(); x.AddEntry("sign.xml", xmldata.XML, Encoding.UTF8); x.AddEntry("sign.xml.crt", signature1); Все равно выдает ту же ошибку! Подписал этот файл через КриптоАРМ, открыл подпись, там есть инфа про сертификат подписавшего... Мне по видимому тоже это надо как-то добавить? Отредактировано пользователем 26 марта 2014 г. 11:44:04(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,512   Сказал «Спасибо»: 554 раз Поблагодарили: 2251 раз в 1756 постах
|
Автор: lexmove  Цитата:using (MemoryStream stream = new MemoryStream(data)) { myhash.ComputeHash(stream); } byte[] signature1 = prov.SignHash(myhash.Hash);
ZipFile x = new ZipFile(); x.AddEntry("sign.xml", xmldata.XML, Encoding.UTF8); x.AddEntry("sign.xml.crt", signature1); Все равно выдает ту же ошибку! Подписал этот файл через КриптоАРМ, открыл подпись, там есть инфа про сертификат подписавшего... Мне по видимому тоже это надо как-то добавить? Описание смотрели? Нужно читать и делать CMS, чтобы проверять в КриптоАРМ. http://cpdn.cryptopro.ru...57-a704-1424adb9ae46.htm |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 18.03.2014(UTC) Сообщений: 6  Сказал(а) «Спасибо»: 2 раз
|
Переделал Цитата:X509Certificate2 found = scollection[0];
ContentInfo contentInfo = new ContentInfo(data); SignedCms signedCms = new SignedCms(contentInfo, true); CmsSigner cmsSigner = new CmsSigner(found); try { signedCms.ComputeSignature(cmsSigner,false); } catch { } byte[] signdetachted = signedCms.Encode(); ZipFile x = new ZipFile(); x.AddEntry("sign.xml", xmldata.XML, Encoding.UTF8); x.AddEntry("sign.xml.crt", signdetachted); КриптоАРМ выдает ошибку "Одна или несколько подписей некорректна или нет доверия". Притом стандартную программную проверку (Verify) проходит Успешно. Отредактировано пользователем 26 марта 2014 г. 16:43:05(UTC)
| Причина: Не указана Вложение(я):  Test.zip (7kb) загружен 2 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 18.03.2014(UTC) Сообщений: 6  Сказал(а) «Спасибо»: 2 раз
|
Если при подписи добавить байты кодировки utf8 Цитата:byte[] utf8 = { 239, 187, 191 }; ArrayList ar = new ArrayList(); ar.AddRange(utf8); ar.AddRange(data3); byte[] data = new byte[ar.Count]; data = (byte[])ar.ToArray(typeof(byte));
ContentInfo contentInfo = new ContentInfo(data); То в КриптоАРМ все проверяет нормально, но при программной проверке тоже придется добавлять данные байты. Просто КриптоАРМ загружает физические файлы(присутствуют данные байты) Цитата:byte[] data1 = System.IO.File.ReadAllBytes("C:/Users/Александр/700.xml"); а я работаю с потоками(там нет этих байтов) Как этого избежать? Хотелось бы проверять и программно и КриптоАРМ. Отредактировано пользователем 27 марта 2014 г. 13:02:54(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close