2

我正在尝试在 .Net 中使用带有 ECDsa (ECDsaCng) 和 SHA256 的 SignedXml,我收到一条带有消息“无法创建签名密钥”的“CryptographicException”。有人知道如何实现这一目标,或者我是否应该知道有关 .net 对 ecdsa 的支持的相关信息?先感谢您。

public XmlDocument SignXml(XmlDocument xmlDoc)
    {
        CngKey cngKey = CngKey.Create(CngAlgorithm.ECDsaP256);
        ecDsaCng = new ECDsaCng(cngKey);
        ecDsaCng.HashAlgorithm = CngAlgorithm.ECDsaP256;
        ecDsaCng.KeySize = 256;

        xmlDoc.PreserveWhitespace = true;

        SignedXml signedXml = new SignedXml(xmlDoc);
        signedXml.SigningKey = ecDsaCng;

        Reference reference = new Reference();
        reference.Uri = "";
        XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
        reference.AddTransform(env);
        signedXml.AddReference(reference);

        signedXml.ComputeSignature();

        XmlElement xmlDigitalSignature = signedXml.GetXml();
        xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));
        return xmlDoc;
    }

“signedXml.ComputeSignature();”中出现错误 方法调用。

4

1 回答 1

2

看看组装

[System.Security,版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a]

在方法中

公共无效计算签名()

只接受RSADSA密钥。遗憾的是,它没有在MSDN的某处指定。您必须传递 SignedXml 类。

于 2015-01-19T18:52:48.247 回答