Статус: Новичок
Группы: Участники
Зарегистрирован: 27.10.2011(UTC) Сообщений: 1
|
Здравствуйте, пытаюсь проверять документы от налоговой (они в формате УФЭБС приходят), но как-то не особо получается пока, и не знаю в какую сторону дальше копать в качестве исходных данных есть пример сообщения из налоговой, и собственно сертификат, которым якобы сообщения должны проверяться в SDK от шарпея есть примеры для работы с XML (SignedXML), но при работе с УФЭБС они видимо не особо применимы и соответственно я за основу взял примеры с подписанием простой строки, скорее всего я как-то неправильно произвожу подготовку текста к подписанию, но может быть кто-то уже реализовывал проверку УФЭБС документов и сможет подсказать где ошибка для проверки я использую следующий код: Код:using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography.Xml;
using System.Xml;
using CryptoPro.Sharpei;
namespace GostSignedXmlTest
{
class Program
{
const string CertificatePath = @"d:\cert_mci\rsrv.cer";
const string PacketEPD = @"d:\cert_mci\sample.xml";
const string CanonizedXML = @"d:\cert_mci\canonized_{0}.xml";
static void Main(string[] args)
{
// Создаем новый XML документ в памяти.
XmlDocument xmlDocument = new XmlDocument();
// Загружаем подписанный документ из файла.
xmlDocument.Load(PacketEPD);
// читаем сертификат
X509Certificate2 cert = new X509Certificate2(CertificatePath);
// Создаем объект, реализующий алгоритм ГОСТ 3410 через CSP.
var Gost = (Gost3410CryptoServiceProvider)cert.PublicKey.Key;
// Создаем объект, реализующий алгоритм хэширования ГОСТ 3411
Gost3411CryptoServiceProvider GostHash = new Gost3411CryptoServiceProvider();
// получаем все подписи
var signatureNodes = xmlDocument.GetElementsByTagName("SigValue", "urn:cbr-ru:dsig:v1.1");
// идём в обратном порядке, потому что они исчезают из списка
for (int i = signatureNodes.Count - 1; i >= 0; i--)
{
var sigValue = signatureNodes[i];
// конвертируем значение подписи в массив байт
var signature = Convert.FromBase64String(sigValue.InnerXml);
// берем родителя подписи, чтобы проверить на нём подпись
var parentNode = sigValue.ParentNode;
// при этом удаляем саму подпись из него
sigValue.ParentNode.RemoveChild(sigValue);
// теперь нужно провести канонизацию родительского элемента, для этого
// создаем новый объект xml документа
var parent = new XmlDocument();
// и записываем в него текст родительского элемента
var parentText = parentNode.OuterXml;
parent.LoadXml(parentText);
// а теперь мы можем произвести трансформацию этого документа
XmlDsigC14NTransform transform = new XmlDsigC14NTransform();
transform.LoadInput(parent);
// после трансформации, мы получаем поток байт для проверки подписи
using (var canonizedMemoryStream = (MemoryStream)transform.GetOutput(typeof(Stream)))
{
// сохраним канонизированное представление родительского элемента, чтобы потом его можно было проверить
var bytes = canonizedMemoryStream.ToArray();
File.WriteAllBytes(string.Format(CanonizedXML, i), bytes);
// Проверяем правильность подписи и выводим результат:
if (Gost.VerifyData(bytes, GostHash, signature))
{
Console.WriteLine("Подпись вычислена верно.");
}
else
{
Console.WriteLine("Подпись вычислена неверно.");
}
}
}
Console.ReadKey();
}
}
}
пример XML файла и сертификат из налоговой: СертификатПример XML файлапримеры данных, полученных после канонизации (байты под подпись): сообщение разсообщение двафайлы, которые получаются в результате канонизации, как мне кажется, соответствуют описанию из соответствующей инструкции, но проверка подписи не проходит на машине установлены КриптоПро CSP (3.6.6497), КриптоПро Sharpei RTE (1.0.4087.0) и КриптоПро Sharpei SDK (1.0.4087.0), но пока еще бесплатные(тестовые), это какую-то роль играть может? Вложение(я):  rsrv.cer (2kb) загружен 8 раз(а). sample.xml (2kb) загружен 12 раз(а). Program.cs (5kb) загружен 10 раз(а). canonized_1.xml (1kb) загружен 17 раз(а). canonized_0.xml (1kb) загружен 11 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close