.NET 4.x Подпись XML-файлы электронно-цифровой подписью - C#
Формулировка задачи:
Не по теме:
была конечно
слегка похожая
тема в разделе криптографии, но там без ответов, и там тогда планировал на делфи, надеюсь это не будет считаться кросспостингоместь папка в которой куча файлов, например, xml. Нужно их взять и подписать с помощью ЭЦП (пока планируется использование виндового х509 сертификата), потом пересохранить\переложить в другую папку.
Подскажите, пожалуйста,словами
с помощью чего бы Вы это делали и как? Заранее большое спасибо!Решение задачи: «.NET 4.x Подпись XML-файлы электронно-цифровой подписью»
textual
Листинг программы
using System;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography.Xml;
using System.Xml;
namespace x509certificate {
class Program {
static void Main() {
//КОДИРУЕМ
XmlDocument xml = new XmlDocument();
xml.PreserveWhitespace = true;
xml.Load("1.xml");
//Выбираем узел для кодирования
XmlElement el = xml.SelectSingleNode(@"//documents") as XmlElement;
//Кодируем makecert -r -pe -n "CN=XML_ENC_TEST_CERT" -b 01/01/2005 -e 01/01/2020 -sky exchange -ss my
X509Certificate2 cert = null;
X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
foreach(X509Certificate2 c in store.Certificates)
if(c.Subject == "CN=XML_ENC_TEST_CERT") {
cert = c;
break;
}
store.Close();
EncryptedXml eXml = new EncryptedXml();
EncryptedData edElement = eXml.Encrypt(el, cert);
//заменяем узел на кодированный
EncryptedXml.ReplaceElement(el, edElement, false);
xml.Save("2.xml");
//ДЕКОДИРУЕМ
xml.Load("2.xml");
eXml = new EncryptedXml(xml);
eXml.DecryptDocument();
xml.Save("3.xml");
}
}
}