【问题标题】:How to decide on class of object to be created from algorithm URI如何确定要从算法 URI 创建的对象的类别
【发布时间】:2012-07-18 14:09:10
【问题描述】:

由于强加给我的规范,我编写了自己的 C# 代码来签署 XML,并验证签署的 XML。就像 SignedXml 类一样,但是这样我更灵活,例如是否使用 XML 命名空间前缀(似乎 SignedXml 不喜欢签名 XML 中的命名空间前缀,但我的 XML 规范说我必须拥有它们),以及签名算法(规范现在说 sha256)。

似乎一切正常,但困扰我的一个“不完美”是 - 例如 - 在验证 xml 时,我需要使用特定类别的对象来转换或验证数据,而我所要做的就是XML 中指定的算法 URI。一个例子是规范化:如果 XML 显示 "http://www.w3.org/2001/10/xml-exc-c14n#"知道我可以使用 XmlDsigExcC14NTransform 类,但我的问题是:有没有办法从这样的 URI(或任何 URI) 到特定类别的对象?

我现在使用我已知的 URI 列表和它们引用的对象类(我认为)(或将其与已知对象类列表的算法属性进行比较,例如 XmlDsigExcC14NTransform.Algorithm),这不是真的我喜欢什么。

【问题讨论】:

    标签: xml cryptography uri canonicalization xml-dsig


    【解决方案1】:

    这没有很好的记录,但System.Security.Cryptography.CryptoConfig.CreateFromName(string) 将返回与 URI 关联的转换。

    【讨论】:

    • 感谢 poupou:从转换 URI 我现在确实可以得到相关的转换。签名方法需要类似的关联。例如:“SHA256”与 URI“w3.org/2001/04/xmldsig-more#rsa-sha256”和 SHA256Managed 类相关联。 CryptoConfig.CreateFromName("SHA256") 将返回一个 SHA256Managed 类对象; CryptoConfig.MapNameToOID("SHA256") 将返回 RSACryptoServiceProvider 的 SignData() 和 VerifyData() 方法所需的 OID。有没有办法从“SHA256”到“w3.org/2001/04/xmldsig-more#rsa-sha256”和/或反之亦然?
    • 不,"SHA256" 之类的字符串可以映射到多个 URI,这意味着您的应用程序仍需要决定应用哪一个。由于您的应用程序需要知道这样的 API 没有什么价值。
    • 没问题 :-) 为了帮助其他人,请点击答案投票计数下的复选标记,以便将来的搜索显示答案可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 2015-11-02
    相关资源
    最近更新 更多