Я разрабатываю приложение, которое берется за то, чтобы производить документы xml и эта подписывает их с простой подписью Ксадес Энвелопед,
Процесс, который у меня есть, чтобы подписывать, - следующий:
до сих пор код, который я использую, чтобы подписывать документы, - этот
private static void FirmarDocumento(string pathXmlDocument, string pathCert, string passCert, string pathXmlSignet)
{
XmlDocument documentXml = new XmlDocument();
documentXml.Load(pathXmlDocument);
SignedXml firmado = new SignedXml(documentXml);
var cert = RSA_helper.GetX509Certificate(pathCert, passCert);
firmado.SigningKey = (RSA)cert.PrivateKey;
firmado.SignedInfo.SignatureMethod = "http://www.w3.org/2000/09/xmldsig#rsa-sha1";
//digest info
Reference reference = new Reference();
reference.Uri = "#Documento101";
reference.DigestMethod = "http://www.w3.org/2000/09/xmldsig#sha1";
firmado.AddReference(reference);
// with the public key will be added in the signature part.
KeyInfo keyInfo = new KeyInfo();
keyInfo.AddClause(new RSAKeyValue((RSA)cert.PrivateKey));
keyInfo.AddClause(new KeyInfoX509Data(cert));
firmado.KeyInfo = keyInfo;
firmado.ComputeSignature();
XmlElement xmlDigitalSignature = firmado.GetXml();
// buscamos el ultimo elemento del documento para agregarle la firma
XmlElement elemento = (XmlElement)documentXml.SelectSingleNode(@"//Document/Content/adu/TmstFirma[last()]");
XmlNode parent = elemento.ParentNode;
parent.InsertAfter(xmlDigitalSignature, elemento);
documentXml.Save(pathXmlSignet);
}
Уже произведенный файл это переместил из-за функции, которая берется за то, чтобы оставлять это в UFT-8 (они просят это у меня так):
private static void ConvertirUTF8(String sourcePath)
{
File.SetAttributes(sourcePath, FileAttributes.Normal);
var sinUtf8Bom = new System.Text.UTF8Encoding(false);
var contenido = File.ReadAllLines(sourcePath);
File.SetAttributes(sourcePath, FileAttributes.Normal);
System.IO.File.WriteAllLines(sourcePath, contenido, sinUtf8Bom);
}
Если я проверяю кодирование, он вытекает в UTF-8, но если после я хочу санкционировать файл с Вашей этой подписью, не перемещает ее.
Я думаю, что он, потому что как уже я произвел файл после я этим манипулирую после того, как это конвертирую в utf-8, и когда я хочу санкционировать подпись, он выходит у меня отрицаемым.
Чего мне не хватает в моей функции FirmarDocumento для того, чтобы файлы, которые он подписывает, вышли уже в UTF-8? так он мог бы удалять эту функцию, чтобы конвертировать. Я ищу, но пока я ничего не нашел.
Кто-то знает?
Большое спасибо