Статус: Участник
Группы: Участники
Зарегистрирован: 31.07.2012(UTC) Сообщений: 13
|
В C# делаю подпись xml-файла с помощью ЭЦП. Вопрос как из этого XML файла вычислить хэш по алгоритму ГОСТ Р 34.11-94.? Надо ли подключать какие либо библиотеки или использовать неуправляемый код.? Подскажите в каком направлении думать?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 31.07.2012(UTC) Сообщений: 13
|
пытаюсь сделать реализацию таким образом: Gost3410CryptoServiceProvider GostHash = new Gost3411CryptoServiceProvider(); но visual studio 2010 ругается на то что, не удается найти имя типа или пространства имен Gost3410CryptoServiceProvider (пропущена директива using или ссылка на сборку
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 03.04.2008(UTC) Сообщений: 380  Откуда: Россия, г. Белгород Сказал «Спасибо»: 11 раз Поблагодарили: 9 раз в 9 постах
|
1. добавить в проекте ссылку на КриптоПро .NET 2. using
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 31.07.2012(UTC) Сообщений: 13
|
dedov написал:1. добавить в проекте ссылку на КриптоПро .NET 2. using в обозревателе решений жму по проекту и выбираю добавить ссылку, но в списке .NET нет ничего похожего на КриптоПро.NET
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,747   Сказал «Спасибо»: 575 раз Поблагодарили: 2306 раз в 1807 постах
|
losko написал:dedov написал:1. добавить в проекте ссылку на КриптоПро .NET 2. using в обозревателе решений жму по проекту и выбираю добавить ссылку, но в списке .NET нет ничего похожего на КриптоПро.NET примеры из SDK тоже не работают? Цитата: но в списке .NET нет ничего похожего на КриптоПро.NET
а похожего на CryptoPro* ничего нет? Цитата: using CryptoPro.Sharpei;
Отредактировано пользователем 13 августа 2012 г. 15:20:25(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 14.10.2011(UTC) Сообщений: 149  Поблагодарили: 32 раз в 31 постах
|
А КриптоПро .Net вообще установлен? В списке .Net должно быть CryptoPro.Sharpei.* Отредактировано пользователем 13 августа 2012 г. 15:05:09(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 31.07.2012(UTC) Сообщений: 13
|
Yoda написал:А КриптоПро .Net вообще установлен? В списке .Net должно быть CryptoPro.Sharpei.* Скажите, а без этого CryptoPro.Sharpei никак нельзя реализовать алгоритм хеширования по ГОСТ, используя Gost3410CryptoServiceProvider?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,747   Сказал «Спасибо»: 575 раз Поблагодарили: 2306 раз в 1807 постах
|
Gost3410CryptoServiceProvider в CryptoPro.Sharpei ...
|
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 03.04.2008(UTC) Сообщений: 380  Откуда: Россия, г. Белгород Сказал «Спасибо»: 11 раз Поблагодарили: 9 раз в 9 постах
|
losko написал:Yoda написал:А КриптоПро .Net вообще установлен? В списке .Net должно быть CryptoPro.Sharpei.* Скажите, а без этого CryptoPro.Sharpei никак нельзя реализовать алгоритм хеширования по ГОСТ, используя Gost3410CryptoServiceProvider? есть два варианта 1. высокоуровневый криптопро.net 2. низкоуровневый crypto api выбирайте
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 31.07.2012(UTC) Сообщений: 13
|
Вот, что получилось на данный момент с реализацией ЭЦП. Вот только после того, как был выбран нужный сертификат для подписывания XML-файла из хранилища личные, не формируется подпись. А мне нужно отобразить в консоли сам файл, а также положить рядом с ним подпись. Что было мной упущено? using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptography; using System.Xml; using System.IO; using System.Security.Cryptography.Xml; using System.Security.Cryptography.X509Certificates; using System.Runtime.InteropServices; using CryptoPro.Sharpei;
namespace IRUC { public class Program { public static void Main(string[] args) { try {
// Создаем объект XmlDocument путем загрузки XML-файла с диска. Объект XmlDocument содержит XML-элемент, подлежащий шифрованию XmlDocument xmlDoc = new XmlDocument(); xmlDoc.PreserveWhitespace = true; xmlDoc.Load(@"c:\test\1.xml");
// // подписываем XML документ. SignXml(xmlDoc);
//Console.WriteLine("XML файл подписан.");
// // сохраняем подписанный документ // xmlDoc.Save("c:\\test\\2.txt");
}
catch (Exception e) { Console.WriteLine(e.Message); }
Console.ReadLine();
}
// метод, который подписывает XML public static void SignXml(XmlDocument xmlDoc) { //Извлекаем нужный нам сертификат
string certThumbprint = @"@"DD058651A48287DB426D50713369906BF59778D6";";
X509Store storeMy = new X509Store(StoreName.My, StoreLocation.CurrentUser);
storeMy.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);
X509CertificateCollection foundCertColl = storeMy.Certificates.Find(X509FindType.FindByThumbprint, certThumbprint, false);
if (foundCertColl.Count == 0) { Console.WriteLine("Сертификат: \n"+ certThumbprint + "\n"+ "не найден"); }
else { Console.WriteLine("Найдено " + foundCertColl.Count.ToString() + " сертификатов:\n" + certThumbprint); } CspParameters cspPar = new CspParameters(); cspPar.KeyContainerName = @"Вход на портал"; cspPar.ProviderType = 75; using (Gost3410CryptoServiceProvider Key = new Gost3410CryptoServiceProvider(cspPar)) { X509Certificate cert = foundCertColl[0]; SignedXml signedXml = new SignedXml(xmlDoc);
// Добавляем ключ в SignedXml документ. signedXml.SigningKey = Key;
// Создаем ссылку на node для подписи. // При подписи всего документа проставляем "". Reference reference = new Reference(); reference.Uri = "";
// Явно проставляем алгоритм хеширования, // по умолчанию SHA1. reference.DigestMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
// Добавляем transform на подписываемые данные // для удаления вложенной подписи. XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
reference.AddTransform(env);
// Добавляем transform для канонизации. XmlDsigExcC14NTransform c14 = new XmlDsigExcC14NTransform(); reference.AddTransform(c14);
// Добавляем ссылку на подписываемые данные signedXml.AddReference(reference);
KeyInfo keyInfo = new KeyInfo(); keyInfo.AddClause(new KeyInfoX509Data(cert));
// Добавляем KeyInfo в SignedXml. signedXml.KeyInfo = keyInfo;
// Вычисляем подпись. signedXml.ComputeSignature(); //Здесь возникает exception
// Получаем XML представление подписи и сохраняем его // в отдельном node. XmlElement xmlDigitalSignature = signedXml.GetXml();
// Добавляем node подписи в XML документ. xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true)); } }//return xmlDoc;
}
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close