c# - 从存储为“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();
}
解决方案
推荐阅读
- java - 有没有办法减少 JVM 的堆外开销?
- flutter - 更改 Flutter 桌面应用程序窗口大小
- python - PyTorch 的 DataLoader() 中的 next() 和 iter() 做了什么
- java - Java流如何将具有数量的对象解包到单个对象的列表中
- amazon-web-services - 使用 EC2 实例在 ELB 后面设置 ETCD 集群
- python - 创建新的 CSV 第一次迭代并在下一次迭代中追加
- python - 如何用python制作图像序列的lottie动画?
- git - 无法推送到 git 远程存储库
- css - 如何在引导程序中使用 flexbox 列制作可滚动菜单
- android - 如何为 HMS Core App 提供权限?