标签: c14n

SignedXml 进行的错误规范化 (c14n) - 它删除了换行符 (
) - 是 .NET 错误吗?

我们正在从使用 java 的第三方接收签名的 xml。我们的 .NET 实现会正确验证签名,除非 xml 包含 字符参考。

看起来 .NET 在 c14n 进程中的某处删除了该换行符。

我用下一个 xml 在 c# 中运行了一些测试:

var xml = "<a>something&#13;\nsomething\r\n</a>";
Run Code Online (Sandbox Code Playgroud)

使用 c14n 的下一个代码:

    public static void c14n(string xml)
    {
        using (MemoryStream msIn = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
        {
            var t = new XmlDsigExcC14NTransform(false);
            t.LoadInput(msIn);
            var o = t.GetOutput() as MemoryStream;
            var c14n = Encoding.UTF8.GetString((o as MemoryStream).ToArray());
            Console.WriteLine(c14n);
        }
    }
Run Code Online (Sandbox Code Playgroud)

将产生下一个 xml,这符合w3org规范(每行以 LF 字符结尾):

<a>something&#xD;
something
</a>
Run Code Online (Sandbox Code Playgroud)

但是,当使用下一个代码查看具有 SignedXml .NET 类签名的 xml 的规范形式时:

public static void SignXml(string …
Run Code Online (Sandbox Code Playgroud)

c# xml digital-signature signedxml c14n

6
推荐指数
0
解决办法
763
查看次数

标签 统计

c# ×1

c14n ×1

digital-signature ×1

signedxml ×1

xml ×1