В C#, знак xml с x.509 сертификатом и проверкой подпись

nvarchar хранит данные как Unicode, таким образом, если Вы собираетесь хранить многоязычные данные (больше чем один язык) в столбце данных, Вам нужен вариант N.

17
задан skaffman 29 July 2009 в 07:15
поделиться

2 ответа

В .NET, если вы получили сертификат X509 из файла .pfx, например:

 X509Certificate2 certificate = new X509Certificate2(certFile, pfxPassword);
 RSACryptoServiceProvider rsaCsp = (RSACryptoServiceProvider) certificate.PrivateKey;   

Затем вы можете экспортировать общедоступный Ключевая часть выглядит так:

 rsaCsp.ToXmlString(false);

«Ложная» часть говорит: экспортировать только открытую часть, не экспортировать частную часть. (документ для RSA.ToXmlString )

Затем в проверяющем приложении используйте

 RSACryptoServiceProvider csp = new RSACryptoServiceProvider();
 csp.FromXmlString(PublicKeyXml);
 bool isValid = VerifyXml(xmlDoc, rsa2);

И VerifyXml вызывает CheckSignature () . Это выглядит примерно так:

private Boolean VerifyXml(XmlDocument Doc, RSA Key)
{
    // Create a new SignedXml object and pass it
    // the XML document class.
    var signedXml = new System.Security.Cryptography.Xml.SignedXml(Doc);

    // Find the "Signature" node and create a new XmlNodeList object.
    XmlNodeList nodeList = Doc.GetElementsByTagName("Signature");

    // Throw an exception if no signature was found.
    if (nodeList.Count <= 0)
    {
        throw new CryptographicException("Verification failed: No Signature was found in the document.");
    }

    // Though it is possible to have multiple signatures on 
    // an XML document, this app only supports one signature for
    // the entire XML document.  Throw an exception 
    // if more than one signature was found.
    if (nodeList.Count >= 2)
    {
        throw new CryptographicException("Verification failed: More that one signature was found for the document.");
    }

    // Load the first <signature> node.  
    signedXml.LoadXml((XmlElement)nodeList[0]);

    // Check the signature and return the result.
    return signedXml.CheckSignature(Key);
}
19
ответ дан 30 November 2019 в 13:21
поделиться

Любой сертификат имеет публичную и частную части. Вы рассылаете только публичную часть. Просто откройте любой веб-сайт с поддержкой SSL в своем браузере, нажмите на символ замка и посмотрите на его сертификат.

5
ответ дан 30 November 2019 в 13:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: