C# 如何验证以下代码的SignedXML?

C# 如何验证以下代码的SignedXML?,c#,xml,soap,C#,Xml,Soap,我正在做一个项目,需要检查提供的XML是否有效。 为此,我使用c#中的signedXml类,使用代码验证XML 请查找verify()方法的以下代码: public bool Verify(XmlDocument signedDocument) { // create a signed xml object from xml SignedXml signedXml = new SignedXml(signedDocument); // get the signa

我正在做一个项目,需要检查提供的
XML
是否有效。 为此,我使用c#中的
signedXml
类,使用代码验证
XML

请查找
verify()
方法的以下代码:

    public bool Verify(XmlDocument signedDocument)
{
    // create a signed xml object from xml 
    SignedXml signedXml = new SignedXml(signedDocument);
    // get the signature node and load the signature tag
    XmlNodeList nodeList = signedDocument.GetElementsByTagName("Signature");
    signedXml.LoadXml((XmlElement)nodeList[0]);

    // define and create the encryption key
    CspParameters CSPParam = new CspParameters();
    CSPParam.Flags = CspProviderFlags.UseMachineKeyStore;
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(CSPParam);
    rsa.FromXmlString(@"<RSAKeyValue><Modulus>03COUbx8JI6jkkmxrQ3N//67tgMt+ak1SKSXbGO3+4vVGFGhyGICJS8C+W6ON6dUdcm2/uxC5q4wyPRyFWMf8v8oslGOWJdADPnP8rvcy8PL3Nf67f8fMnTyHoEoZTfZjKuEoyhmPi6rfAX4QQA+OYhk4Qb1FJyOB3fpZ1QiTxX2k=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>");

    // load encryption key to the xml
    KeyInfo keyInfo = new KeyInfo();
    keyInfo.AddClause(new RSAKeyValue(rsa));
    signedXml.KeyInfo=keyInfo;
    // check if the signature provided in signature tag is valid with the key info
    bool b = signedXml.CheckSignature();
    return b;
}
public bool-Verify(XmlDocument-signedDocument)
{
//从xml创建签名的xml对象
SignedXml SignedXml=新的SignedXml(signedDocument);
//获取签名节点并加载签名标记
XmlNodeList nodeList=signedDocument.GetElementsByTagName(“签名”);
signedXml.LoadXml((xmlement)节点列表[0]);
//定义并创建加密密钥
CspParameters CSPParam=新CspParameters();
CSPParam.Flags=CspProviderFlags.UseMachineKeyStore;
RSACryptServiceProvider rsa=新的RSACryptServiceProvider(CSParam);
rsa.FromXmlString(@“03COUbx8JI6jkkmxrQ3N//67tgMt+ak1SKSXbGO3+4vvvgfghygicjs8c+W6ON6dUdcm2/uxc5q4wypryfwmf8v8oslgowjdappnp8rvcy8pl3nf67ffmnthoetfzjkueyhmpi6rfax4qqa+oyhk4qb1fjyob3fz1qit2k=AQAB”);
//将加密密钥加载到xml
KeyInfo KeyInfo=新的KeyInfo();
添加子句(新的RSAKeyValue(rsa));
signedXml.KeyInfo=KeyInfo;
//检查签名标签中提供的签名是否与密钥信息有效
bool b=signedXml.CheckSignature();
返回b;
}
提供给该方法的xml数据为:

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" id="MySignature">
    <SignedInfo>
      <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
      <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
      <Reference URI="#_ea559faf-417b-407f-bdc2-bccc76dab76c">
        <Transforms>
          <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
          <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
          </Transform>
        </Transforms>
        <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
        <DigestValue>fvQx+J90ZGKhwj8Mfhg6v/esOtI=</DigestValue>
      </Reference>
    </SignedInfo>
    <SignatureValue>fvQx+J90ZGKhwj8Mfhg6v/esOtI=</SignatureValue>
  <KeyInfo type="http://www.w3.org/2000/09/xmldsig#RSAKeyValue">    
   <RSAKeyValue><Modulus>03COUbx8JI6jkLrQ3N//67tgMt+ak1SKSXbGO3+4vVGFGhyGICJS8C+W6ON6dUdcm2/uxC5q4wyPRyFWMf8v8oslGOWJdADPnP8rvcy8PL3Nf67f8fMnTyHoEoZTfZjKuEoyhmPi6rfAX4QQA+OYhk4Qb1FJyOB3fpZ1QiTxX2k=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>
  </KeyInfo >   
</Signature>
</soap:Envelope>

fvQx+J90ZGKhwj8Mfhg6v/esOtI=
fvQx+J90ZGKhwj8Mfhg6v/esOtI=
03COUbx8JI6jkLrQ3N//67tgMt+ak1SKSXbGO3+4vvvgfghygicjs8c+W6ON6dUdcm2/uxc5q4wypryfwmf8v8oslgowjdappnp8rvcy8pl3nf67ffmnthoetfzjkueyhmpi6rfax4qqa+OYhk4Qb1FJyOB3fpZ1QiTxX2k=AQAB
我无法找出
xml
中设置错误的标签值。
signedXml.CheckSignature()
的结果总是得到
false

有人能帮我解决这个问题吗

提前谢谢。
如果需要更多信息,请告诉我。

我删除了错误。从VS:Project:addnewitem:XML文件中的菜单。然后将xml粘贴到页面中,确保只有一行xml id从第一列开始。系统将查找警告或错误


fvQx+J90ZGKhwj8Mfhg6v/esOtI=
fvQx+J90ZGKhwj8Mfhg6v/esOtI=
03COUbx8JI6jkLrQ3N//67tgMt+ak1SKSXbGO3+4vvvgfghygicjs8c+W6ON6dUdcm2/uxc5q4wypryfwmf8v8oslgowjdappnp8rvcy8pl3nf67ffmnthoetfzjkueyhmpi6rfax4qqa+oyhk4qb1fjyob3fpz1qit2k=
AQAB

您需要xmlns:type并且缺少KeyValue标记您还应该有大写字母“I”,而不是小写字母“I”:Id=“MySignature”您好,谢谢您的回答。但是,仍然是
bool b=signedXml.CheckSignature()将我的输出设置为false。我正在寻找一些更改,这些更改将为我提供上述代码语句值
true
我使用下面的wewbpage使用您的模数、密钥和加密消息对消息进行解密,得到值1。您可能会得到包含百分号的文本。请看以下网页:我找不到它。你能详细说明一下吗。