gpt4 book ai didi

c# - SignedXml 报告 "Unknown transform has been encountered."

转载 作者:行者123 更新时间:2023-12-03 14:58:08 36 4
gpt4 key购买 nike

我需要验证签名的 xml。

在 c# 中运行时,会出现下一个错误:“遇到未知转换。”。但是在java中运行它正确地验证了xml。

看起来 .net 框架无法识别 xmldsig-filter2。在 c#/.net 中可以对这个问题做些什么吗?

<dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
<dsig:SignedInfo>
<dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<dsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<dsig:Reference Id="reference-data-0" URI="">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2002/06/xmldsig-filter2">
<xf2:XPath Filter="intersect" xmlns:xf2="http://www.w3.org/2002/06/xmldsig-filter2">here()/ancestor::SomeNS:SomeElement[1]</xf2:XPath>
</dsig:Transform>
<dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<dsig:DigestValue>...</dsig:DigestValue>
</dsig:Reference>
</dsig:SignedInfo>
<dsig:SignatureValue>
...
</dsig:SignatureValue>
</dsig:Signature>

最佳答案

您可以从 Transform 派生自己分类并实现算法并使用 CryptoConfig.AddAlgorithm 注册转换.但是 .NET 不允许转换对于规范化是安全的,因此您必须在 registry 中允许它。在 HKLM:\\SOFTWARE\Microsoft\.NETFramework\Security\SafeTransformMethods 下或使用反射来修改保存列表的私有(private)字段。

public class XmlDigSigFilter2Transform : Transform {
public static void Register() {
var self = CryptoConfig.CreateFromName(Url);
if (self == null) {
CryptoConfig.AddAlgorithm(typeof(XmlDigSigFilter2Transform), Url);
}
var signedXmlType = typeof(SignedXml);
var knownCanonicalizationMethodsField =
signedXmlType.GetField(
"s_knownCanonicalizationMethods",
BindingFlags.NonPublic | BindingFlags.Static);

if (knownCanonicalizationMethodsField == null) {
return;
}

var knownCanonicalizationMethodsValue =
knownCanonicalizationMethodsField.GetValue(new SignedXml());

if (!(knownCanonicalizationMethodsValue is IList<string> list)) {
return;
}

if (!list.Contains(Url)) {
list.Add(Url);
}
}

...
}

关于c# - SignedXml 报告 "Unknown transform has been encountered.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46664340/

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