как меняние кодирования, чтобы подписывать документ в xml с utf-8 в c#

Я разрабатываю приложение, которое берется за то, чтобы производить документы xml и эта подписывает их с простой подписью Ксадес Энвелопед,

Процесс, который у меня есть, чтобы подписывать, - следующий:

  1. Я произвожу файл xml.
  2. Я меняю в utf-8 файл.
  3. Этот файл это подписал, он сохраняет как utf-8 with бум (или нечто похожее)
  4. я конвертирую этот файл, подписанный в utf-8

до сих пор код, который я использую, чтобы подписывать документы, - этот

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? так он мог бы удалять эту функцию, чтобы конвертировать. Я ищу, но пока я ничего не нашел.

Кто-то знает?

Большое спасибо

6
задан 26.07.2019, 22:26
0 ответов