Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net XML-DSIG:NET中的包络签名转换_.net_Cryptography_Xml Dsig - Fatal编程技术网

.net XML-DSIG:NET中的包络签名转换

.net XML-DSIG:NET中的包络签名转换,.net,cryptography,xml-dsig,.net,Cryptography,Xml Dsig,我正在使用RSA私钥对XML文件进行数字签名 然而,我真正想要的是使用封装签名对xml进行签名。NET是否有本机支持 顺便说一下,这是我的代码: public static void SignXml(XmlDocument xmlDoc, RSA key) { // Check arguments. if (xmlDoc == null) throw new ArgumentException("xmlDoc"); if (key == null)

我正在使用RSA私钥对XML文件进行数字签名

然而,我真正想要的是使用封装签名对xml进行签名。NET是否有本机支持

顺便说一下,这是我的代码:

public static void SignXml(XmlDocument xmlDoc, RSA key)
{
    // Check arguments.
    if (xmlDoc == null)
        throw new ArgumentException("xmlDoc");
    if (key == null)
        throw new ArgumentException("Key");

    SignedXml xml = new SignedXml(xmlDoc);            
    xml.SigningKey = key;

    Reference reference = new Reference();
    reference.Uri = "";

    XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform(true);                        

    reference.AddTransform(env);

    xml.AddReference(reference);

    xml.ComputeSignature();

    XmlElement element = xml.GetXml();

    MessageBox.Show(element.OuterXml);

    xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(element, true));

}

如果签名不是已签名数据的子元素,则不需要信封签名转换

因此,只需跳过XmlDsigEnvelopedSignatureTransform并像执行其他操作一样执行签名:

public XmlElement SignXml(XmlDocument xmlDoc, RSA key)
{
  SignedXml xml = new SignedXml();            
  xml.SigningKey = key;

  // Add the data to be signed as a sub-element of the Signature-element:
  DataObject dataObject = new DataObject();
  dataObject.Data = xmlDoc.ChildNodes;
  dataObject.Id = "doc";
  xml.AddObject(dataObject);

  // Add a reference to the signed data:
  Reference reference = new Reference();
  reference.Uri = "#doc";
  xml.AddReference(reference);  

  // Perform the signature. No transforms are needed.
  xml.ComputeSignature();

  return xml.GetXml();
} 

如果签名不是已签名数据的子元素,则不需要信封签名转换

因此,只需跳过XmlDsigEnvelopedSignatureTransform并像执行其他操作一样执行签名:

public XmlElement SignXml(XmlDocument xmlDoc, RSA key)
{
  SignedXml xml = new SignedXml();            
  xml.SigningKey = key;

  // Add the data to be signed as a sub-element of the Signature-element:
  DataObject dataObject = new DataObject();
  dataObject.Data = xmlDoc.ChildNodes;
  dataObject.Id = "doc";
  xml.AddObject(dataObject);

  // Add a reference to the signed data:
  Reference reference = new Reference();
  reference.Uri = "#doc";
  xml.AddReference(reference);  

  // Perform the signature. No transforms are needed.
  xml.ComputeSignature();

  return xml.GetXml();
} 

我该怎么做?我已经在上面粘贴了我的代码。你能告诉我怎么做吗?我怎么做?我已经在上面粘贴了我的代码。你能告诉我怎么做吗?