Alex2 101 Ответов: 0

Как сгенерировать сигнатуру XML-контента с помощью алгоритма RSA?


Я хочу сгенерировать подпись Xml-контента с текущей датой с помощью алгоритма RSA. Я генерирую подпись для Xml с датой при генерации подписи, но получаю несоответствие подписи . Обновил свой код, как показано ниже.

Что я уже пробовал:

My code is as below:
<pre> byte[] contentbytes = System.Text.Encoding.UTF8.GetBytes(content + CurrentDate);


           

            string contentdatatag = "<![CDATA[" + content + "]]>";


            //string decodedxml = HttpUtility.HtmlDecode(contentdatatag);

            //string decodedxml = contentdatatag.Replace("<", "<").Replace(">", ">");

            XmlNodeList elemList = xmlDoc2.GetElementsByTagName("content");

            elemList[0].InnerText = contentdatatag;





            XmlNodeList elemList1 = xmlDoc2.GetElementsByTagName("date");

            elemList1[0].InnerText = CurrentDate;




            //content = content + elemList1[0].InnerText;

            //string content = System.IO.File.ReadAllText(ToSignFilePath);
            ASCIIEncoding ByteConverter = new ASCIIEncoding();

           

            Stream mStream1 = new MemoryStream(contentbytes);


            string sign = Getsignature(pfxFilePath, "1", mStream1, xmlDoc2);





// bool isValid = privateKey1. VerifyData(данные, "SHA256", подпись);
возврат signedBlock4.Метод toString();
}

private string Getsignature(string path, string password, Stream Data,XmlDocument xmlDoc2)
    {
        string signedBlock4 = string.Empty;
        var collection = new X509Certificate2Collection();
        collection.Import(path, password, X509KeyStorageFlags.PersistKeySet);
        var certificate = collection[0];
        
        bool pvtKeyExists = certificate.HasPrivateKey;
        if (pvtKeyExists == true)
        {
            
            var privateKey = certificate.PrivateKey as RSACryptoServiceProvider;
         

            // Force use of the Enhanced RSA and AES Cryptographic Provider with openssl-generated SHA256 keys
            var enhCsp = new RSACryptoServiceProvider().CspKeyContainerInfo;
            var cspparams = new CspParameters(enhCsp.ProviderType, enhCsp.ProviderName, privateKey.CspKeyContainerInfo.KeyContainerName);
            privateKey = new RSACryptoServiceProvider(cspparams);

            //var signature = privateKey.SignData(Data, "SHA1");
            var signature = privateKey.SignData(Data, "SHA256");
            signedBlock4 = Convert.ToBase64String(signature);


            XmlNodeList elemList = xmlDoc2.GetElementsByTagName("signature");

            elemList[0].InnerText = signedBlock4;

           
        }
<pre>

Kornfeld Eliyahu Peter

Дата постоянно меняется?

[no name]

Да, дата берется в момент генерации подписи, и мы подписываем необходимый Xml-контент с датой создания подписи(DateTime. Now)

0 Ответов