gpt4 book ai didi

c# - 如何使用 RSA-SHA1 算法对 xml 元素进行签名?

转载 作者:数据小太阳 更新时间:2023-10-29 02:48:54 24 4
gpt4 key购买 nike

我需要使用 RSA-SHA1 算法签署(并最终验证)XML 文档的其中一个节点。 w3.org link

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

我正在关注 this example ,但是不知道如何将算法更改为所需的。

签名生成发生在这里:

signedXml.ComputeSignature();

唯一带有参数的覆盖需要 KeyedHashAlgorithm:

public void ComputeSignature(KeyedHashAlgorithm macAlg); ( link )

KeyedHashAlgorithm ( link ) 反过来只允许创建 HMAC* 和 MAC* 算法,没有 RSA-SHA1。

在 .Net 中使用 RSA-SHA1 对 XML 进行签名最轻松的方法是什么?

编辑:

我正在尝试使用 X509 证书来提取 key 。证书的签名算法属性是sha1RSA

这就是我分配它的方式:

var signedXml = new SignedXml(xmlDoc);
...
signedXml.SigningKey = (RSACryptoServiceProvider)cert.PrivateKey;
...
signedXml.ComputeSignature();

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

最佳答案

在 .NET Framework 1.1 到 .NET Framework 4.7 中,您只需将 signedXml.SigningKey 设置为 RSA key 对象即可获得 RSA-SHA-1。

如果安装了 .NET 4.7.1(目前为预览版),RSA 的默认值将更改为 RSA-SHA-2-256,根据 https://github.com/Microsoft/dotnet/blob/master/releases/net471/dotnet471-changes.md .

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

a) 将 signedXml.SigningKey 设置为 RSA key

b) 设置 signedXml.SignedInfo.SignatureMethod = SignedXml.XmlDsigRSASHA1Url

(均在调用 signedXml.ComputeSignature() 之前)

相反,如果您想在当前版本上做一些比 RSA-SHA-1 更好的事情,请将 signedXml.SignedInfo.SignatureMethod 设置为 SignedXml.XmlDsigSHA256Url 或更好。


警告词:现在已发现冲突,SHA-1 被认为出于加密目的已损坏。虽然它(目前)还不足以泛化到攻击任意 XML 的程度,但它很可能会发展到这一点。您真的不应该在任何新事物中使用 SHA-1,并且在决定是否接受签名文档时应该考虑验证您的签名方法是否比基于 SHA-1 的方法更好。

关于c# - 如何使用 RSA-SHA1 算法对 xml 元素进行签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46074784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com