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

时间:2013-06-20 17:56:46

标签: c# .net sha256 signedxml xml-dsig

我现在整整一周都在挣扎,希望有人可以帮助我。

我需要使用SHA256和xmldsig签名xml。 为此,我使用SignedXML类。在查看这个类时,我看到它使用加载键的SignatureAlgorithm值来确定要使用的Hashing类型。

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

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

.Net 4.0应该支持SHA256吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

SHA256的相应字符串为HMACSHA256

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

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