我现在整整一周都在挣扎,希望有人可以帮助我。
我需要使用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吗?
答案 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);