Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline losko  
#1 Оставлено : 13 августа 2012 г. 9:20:58(UTC)
losko

Статус: Участник

Группы: Участники
Зарегистрирован: 31.07.2012(UTC)
Сообщений: 13

В C# делаю подпись xml-файла с помощью ЭЦП. Вопрос как из этого
XML файла вычислить хэш по алгоритму ГОСТ Р 34.11-94.? Надо ли подключать какие либо библиотеки или использовать неуправляемый код.? Подскажите в каком направлении думать?
Offline losko  
#2 Оставлено : 13 августа 2012 г. 9:36:34(UTC)
losko

Статус: Участник

Группы: Участники
Зарегистрирован: 31.07.2012(UTC)
Сообщений: 13

пытаюсь сделать реализацию таким образом:
Gost3410CryptoServiceProvider GostHash = new Gost3411CryptoServiceProvider();
но visual studio 2010 ругается на то что, не удается найти имя типа или пространства имен
Gost3410CryptoServiceProvider (пропущена директива using или ссылка на сборку
Offline dedov  
#3 Оставлено : 13 августа 2012 г. 13:48:10(UTC)
dedov

Статус: Эксперт

Группы: Участники
Зарегистрирован: 03.04.2008(UTC)
Сообщений: 380
Мужчина
Откуда: Россия, г. Белгород

Сказал «Спасибо»: 11 раз
Поблагодарили: 9 раз в 9 постах
1. добавить в проекте ссылку на КриптоПро .NET
2. using
Offline losko  
#4 Оставлено : 13 августа 2012 г. 14:58:50(UTC)
losko

Статус: Участник

Группы: Участники
Зарегистрирован: 31.07.2012(UTC)
Сообщений: 13

dedov написал:
1. добавить в проекте ссылку на КриптоПро .NET
2. using

в обозревателе решений жму по проекту и выбираю добавить ссылку, но в списке .NET нет ничего похожего на КриптоПро.NET
Offline Андрей Писарев  
#5 Оставлено : 13 августа 2012 г. 15:00:36(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline Георгий Садофьев  
#6 Оставлено : 13 августа 2012 г. 15:03:56(UTC)
Георгий Садофьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 14.10.2011(UTC)
Сообщений: 149
Мужчина

Поблагодарили: 32 раз в 31 постах
А КриптоПро .Net вообще установлен?
В списке .Net должно быть CryptoPro.Sharpei.*

Отредактировано пользователем 13 августа 2012 г. 15:05:09(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline losko  
#7 Оставлено : 13 августа 2012 г. 16:44:26(UTC)
losko

Статус: Участник

Группы: Участники
Зарегистрирован: 31.07.2012(UTC)
Сообщений: 13

Yoda написал:
А КриптоПро .Net вообще установлен?
В списке .Net должно быть CryptoPro.Sharpei.*

Скажите, а без этого CryptoPro.Sharpei никак нельзя реализовать алгоритм хеширования по ГОСТ, используя Gost3410CryptoServiceProvider?
Offline Андрей Писарев  
#8 Оставлено : 13 августа 2012 г. 16:46:24(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,747
Мужчина
Российская Федерация

Сказал «Спасибо»: 575 раз
Поблагодарили: 2306 раз в 1807 постах
Gost3410CryptoServiceProvider в CryptoPro.Sharpei ...



Техническую поддержку оказываем тут
Наша база знаний
Offline dedov  
#9 Оставлено : 13 августа 2012 г. 17:05:40(UTC)
dedov

Статус: Эксперт

Группы: Участники
Зарегистрирован: 03.04.2008(UTC)
Сообщений: 380
Мужчина
Откуда: Россия, г. Белгород

Сказал «Спасибо»: 11 раз
Поблагодарили: 9 раз в 9 постах
losko написал:
Yoda написал:
А КриптоПро .Net вообще установлен?
В списке .Net должно быть CryptoPro.Sharpei.*

Скажите, а без этого CryptoPro.Sharpei никак нельзя реализовать алгоритм хеширования по ГОСТ, используя Gost3410CryptoServiceProvider?


есть два варианта
1. высокоуровневый криптопро.net
2. низкоуровневый crypto api

выбирайте
Offline losko  
#10 Оставлено : 14 августа 2012 г. 16:56:51(UTC)
losko

Статус: Участник

Группы: Участники
Зарегистрирован: 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;

}
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.