在C#中生成XML文档哈希

M. *_*ley 10 c# xml hash canonicalization

在C#中散列XML文档的最佳方法是什么?我想散列一个XML文档,以便我可以判断它是否从生成时手动更改.我没有使用它来保证安全性 - 如果有人更改XML并更改哈希值以匹配,则可以.

例如,我会对根的子节点进行哈希并将哈希存储为根的属性:

<RootNode Hash="abc123">
    <!-- Content to hash here -->
</RootNode>
Run Code Online (Sandbox Code Playgroud)

Wim*_*nen 10

.NET具有实现了XML数字签名规范.签名可以添加到原始XML文档内(即"封装签名"),也可以单独存储/传输.

它可能是一个有点矫枉过正,因为你并不需要的安全性,但它有被已经实施的优势,并且是不依赖于语言或平台的标准.


Mat*_*ock 5

您可以使用加密名称空间:

System.Security.Cryptography.MACTripleDES hash = new System.Security.Cryptography.MACTripleDES(Encoding.Default.GetBytes("mykey"));
string hashString = Convert.ToBase64String(hash.ComputeHash(Encoding.Default.GetBytes(myXMLString)));
Run Code Online (Sandbox Code Playgroud)

您只需要使用一个密钥来创建哈希密码器,然后使用您的xml的字符串reqpresentation创建一个哈希即可。

  • Encoding.Default是操作系统当前ANSI代码页的编码。因此,根据“区域和语言选项-高级”选项卡中的设置,您的代码将提供不同的结果。 (2认同)