首页 > 解决方案 > 从存储为“UCS-2 LE BOM”的二进制数组数据中 C# XML 解密

问题描述

我支持较旧的 c++ v100 安全系统。大多数以字节数组(blob 数据)存储在数据库中的 xml 很容易用 UTF-8 解密。但是,我们有几个地方我无法弄清楚如何使用 C# 4.7 将字节数组解密为任何有用的东西。昨天对数据进行了一些研究后,确定数据使用了某种形式的编码,称为“UCS-2 LE BOM”。

我几乎不得不假设这是某种形式的 Unicode……但我还没有让那个二进制数组解密为任何可破译的东西。

如果您有任何类型的示例代码可以让我获得可读的字符串,我们将不胜感激。

到目前为止,我已经尝试了 C# 中提供的所有形式的编码,但结果都很神秘。

每条记录中存储的xml是这样的:

<COMMAND_BLOCK> 
   <COMMAND Workstation='{Workstation}' Source="ServiceManager" Target="{Unit:|SELECT DISTINCT [Name],[Address] FROM [MasterControllers] WHERE [Address] LIKE '{Workstation}.R%'}" Command="50001"/>
</COMMAND_BLOCK>

我目前只是试图让存储的字节数组成为一个字符串。一旦它是一个字符串,我会很好的。我尝试了以下方法:

var xml = Encoding.UTF8.GetString(_commandObjectList[i].ImageData);
var xml2 = Encoding.UTF32.GetString(_commandObjectList[i].ImageData);
var xml3 = Encoding.Unicode.GetString(_commandObjectList[i].ImageData);
var xml4 = Encoding.ASCII.GetString(_commandObjectList[i].ImageData);
var xml5 = Encoding.BigEndianUnicode.GetString(_commandObjectList[i].ImageData);
var xml6 = Encoding.Default.GetString(_commandObjectList[i].ImageData);
var xml7 = Encoding.UTF7.GetString(_commandObjectList[i].ImageData);

返回值

存储在 Sql Server 表中的原始 blob 数据:0xFFFE3C0043004F004D004D0041004E0044005F0042004C004F0043004B003E0020000D000A003C0043004F004D004D0041004E004400200057006F0072006B00730074006100740069006F006E003D0027007B0057006F0072006B00730074006100740069006F006E007D002700200053006F0075007200630065003D00220053006500720076006900630065004D0061006E006100670065007200220020005400610072006700650074003D0022007B0055006E00690074003A007C00530045004C004500430054002000440049005300540049004E004300540020005B004E0061006D0065005D002C005B0041006400640072006500730073005D002000460052004F004D0020005B004D006100730074006500720043006F006E00740072006F006C006C006500720073005D0020005700480045005200450020005B0041006400640072006500730073005D0020004C0049004B004500200027007B0057006F0072006B00730074006100740069006F006E007D002E005200250027007D002200200043006F006D006D0061006E0064003D0022003500300030003200370022002F003E000D000A003C002F0043004F004D004D0041004E0044005F0042004C004F0043004B003E000D000A000000

将 xml 编码到/从数据库中解码的 C++ 代码是 CFile,位于“C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\afx.h”中。用于编码/解码的 C++ 代码:

            CFile fileXML;
            if(fileXML.Open(dlg.m_strFileName, CFile::modeCreate|CFile::modeWrite))
            {
                fileXML.Write(dlg.m_strCommand,dlg.m_strCommand.GetLength());
            fileXML.Close();
            }

标签: c#xmlencoding

解决方案


推荐阅读