当前位置: 首页 > 知识库问答 >
问题:

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

穆英飙
2023-03-14

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

RSA-SHA1 URI:
http://www.w3.org/2000/09/XMLDSIG#RSA-SHA1
指定于:
[XMLDSIG-CORE2002]第6.4.2节

签名生成发生在以下位置:

signedXml.ComputeSignature();

唯一带有参数的重写需要KeyedHashalgorithm:

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

在.NET中用RSA-SHA1签署XML最轻松的方式是什么?

编辑:

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

我是这样分配的:

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

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

共有1个答案

谷玉韵
2023-03-14

在.NET Framework 1.1到.NET Framework 4.7中,只需将SignedXml.SigningKey设置为RSA密钥对象,即可获得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签名,您需要

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

 类似资料:
  • 是否可以使用存储在Azure密钥库中的X509证书创建RSA-SHA1签名?“不可抵赖证明书” 不幸的是,我不能将哈希算法更改为SHA256或更安全的东西,我真的需要将证书作为密钥存储在Azure Key Vault中。 null

  • 问题内容: 我有一个字符串,一个签名和一个公共密钥,我想验证字符串上的签名。密钥如下所示: 我已经阅读了一段时间的pycrypto文档,但是我不知道如何使用这种密钥制作RSAobj。如果您了解PHP,我将尝试执行以下操作: 另外,如果我对任何术语感到困惑,请告诉我。 问题答案: 标记之间的数据是包含PKCS#1 RSAPublicKey的PKCS#8 PublicKeyInfo的ASN.1 DER

  • 我正在使用jose-jwt库,并希望使用RS256加密算法在C#中创建一个有签名的JWT。我对密码学没有经验,所以请原谅我的无知。我在文档中看到以下示例: 它显示了文件的使用,但是如何使用下面表单的RSA密钥文件呢?我正在查看X509Certificate2的文档,但我看不到RSA私钥的选项。它似乎只接受,我认为这是公钥。 最后,文档中列出的两个选项之间的区别是什么?我如何在这两个选项之间进行选择

  • 我遇到了具有的阻止程序。NET Framework 4.5版用于使用数字签名对XML进行签名。 我的问题是,需要使用RSA SHA-256算法使用X.509证书对单个XML元素进行签名。我读过很多书。NET就这个主题发表了文章,似乎有一个最初在CLR安全项目RSAPKCS1SHA256SignatureDescription中开发的解决方案。cs类。RSAPKCS1SHA256SignatureD

  • 我尝试了我的查询的搜索解决方案,我无法找到匹配我正在寻找的,这是非常基本的,但为了我更好地理解我张贴下面的查询。 我想使用“SHA256withRSA”算法对字符串进行编码和签名。我可以看到很多使用“SHA256withRSA”的java示例代码,但在C#中,我可以看到首先使用SHA256对数据进行散列,然后使用RSACryptServiceProvider对散列进行签名。 我的问题是: > 在C

  • 我使用OpenSSL创建了一个自签名证书,如下所示: 然后,我在C#.NET4.0中编写了以下代码: 使用一些文章和答案中的解决方案,我有类,我试图在其中实现和注册签名描述: 我已经验证了hash的长度为字节,它返回一个。但是如果我使用var(20字节长),尽管中指定的算法是,但它可以工作,并使用算法对哈希进行签名。 另外,如果我打印,它的值是http://www.w3.org/2000/09/x