关于c#:如何使用RSA-SHA1算法签署xml元素?

How to sign xml element using RSA-SHA1 algorithm?

我需要使用rsa-sha1算法对XML文档的一个节点进行签名(并最终验证)。W3.ORG链路

RSA-SHA1
URI:
http://www.w3.org/2000/09/xmldsig#rsa-sha1
Specified in:
section 6.4.2 of [XMLDSIG-CORE2002]

我在遵循这个例子,但是我无法理解如何将算法更改为Required。

在此生成签名:

1
signedXml.ComputeSignature();

唯一具有参数的重写需要KeyedHashAlgorithm

public void ComputeSignature(KeyedHashAlgorithm macAlg);(链接)

EDOCX1(link)反过来只允许创建hmac*和mac*算法,没有rsa-sha1。

用rsa-sha1在.NET中签署XML最痛苦的方式是什么?

编辑:

我正在尝试使用X509证书提取密钥。证书的签名算法属性为sha1RSA

这就是我分配它的方式:

1
2
3
4
5
var signedXml = new SignedXml(xmlDoc);
...
signedXml.SigningKey = (RSACryptoServiceProvider)cert.PrivateKey;
...
signedXml.ComputeSignature();

生成的签名XML格式与预期的格式匹配,但digestsignature值无效。


在。NET框架1.1通过.NET Framework 4.7您SHA-1和RSA的一个对象设置signedXml.SigningKeyRSA密钥。

如果。NET(有4.7.1预览)是安装到默认的RSA RSA想改变沙2个通过http://///github.com微软DOTNET BLOB /硕士/ / / dotnet471-changes.md net471释放。

所以,如果你真的想要一个RSA SHA-1签名你需要

a)设置一个signedXml.SigningKeyRSA密钥

b)集signedXml.SignedInfo.SignatureMethod = SignedXml.XmlDsigRSASHA1Url

(这两个在电话signedXml.ComputeSignature())

conversely,如果你想做更好的东西比RSA的SHA - 1的电流signedxml.signedinfo.signaturemethod版本上,集到SignedXml.XmlDsigSHA256Url或更好。

Word的警告:破碎的SHA - 1加密的目的被认为是现在A碰撞已被发现。当它不是广义足够的(在这一点任意的XML)的攻击,它可能会长大一点。你真的不应该是在任何新的使用SHA - 1的,和要考虑的东西,你的签名验证方法是更好的比SHA 1当决定是否接受一个基于符号文件。