繁体   English   中英

.Net 4.0 C#加载SHA256密钥时SignatureAlgorithm更改为SHA1

[英].Net 4.0 C# When loading SHA256 key SignatureAlgorithm changes to SHA1

我整整一个星期都在为此苦苦挣扎,希望有人能帮助我。

我需要使用SHA256和xmldsig签署xml。 为此,我使用了SignedXML类。 查看此类时,我看到它使用已加载密钥的SignatureAlgorithm值来确定要使用的哈希类型。

无论我如何加载密钥(通过加载证书文件的证书存储),SHA1都将显示为SignatureAlgorithm。 当我在MMC证书存储区中查找证书的详细信息时,它将SHA256显示为SignatureAlgorithm。

我尝试了openssl和makecert来生成SHA256证书密钥,但是两者都将在.Net中作为SHA1加载,因此,signedXml.ComputeSignature(); 将使用SHA1作为SignatureMethod

.Net 4.0应该支持SHA256对吗?

发现我可能使用了错误的类。

而不是Microsoft.Web.Services.Security.SignedXml应该使用System.Security.Cryptography.Xml.SignedXml。 后者不使用所用密钥的SignatureAlgorithm来确定要使用的算法。 现在,我可以使用'SignedXml.SignedInfo.SignatureMethod'自己设置算法,并使用SHA1键。

您必须声明一个KeyedHashAlgorithm对象,并传递一个与SHA256相对应的字符串( 此处的文档)。

SHA256的对应字符串是HMACSHA256

然后将此对象传递给ComputeSignature方法。

代码应如下所示:
KeyedHashAlgorithm kha = KeyedHashAlgorithm.Create("HMACSHA256"); signedXml.ComputeSignature(kha);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM