c#转换二进制到文本,然后搜索它

本文关键字:然后 搜索 文本 转换 二进制 | 更新日期: 2023-09-27 18:09:07

我想搜索二进制文件中的文本。

假设我想查找一个单词SEQUENCE

我已经尝试过二进制阅读器,但没有运气。我无法从二进制文件中提取文本。

我当前的代码是这样的:

txtSource.Text = string.Empty;
DialogResult result = openFileDialog1.ShowDialog();
try
{
   if (result == DialogResult.OK)
   {
      txtFile.Text = openFileDialog1.FileName;
      string s;
      using (FileStream fs = new FileStream(txtFile.Text, FileMode.Open))
      using (BinaryReader br = new BinaryReader(fs))
      {
          byte[] bin = br.ReadBytes(Convert.ToInt32(fs.Length));
          txtSource.Text = Convert.ToBase64String(bin);
      }

问候,

Igor

c#转换二进制到文本,然后搜索它

尝试从二进制数据中读取字符串是一种会导致问题的方法(因为并非所有二进制数据都可以转换为有意义的文本形式)。最好是计算出二进制字节序列将用于表示文本,并在文件的二进制中搜索该二进制数据。

字符串可以以多种不同的形式存储。假设字符串是原始存储的(未压缩和未加密),那么您只需要知道所使用的编码(例如,它们是8位ASCII字符还是16位UNICODE字符?)

如果您知道编码,您可以使用encoding的许多覆盖之一将c#字符串转换为二进制表示形式。.net中的GetBytes。例如,如果要查找ASCII字符串"SEQUENCE",则可以使用

生成要查找的字节序列。
byte[] binary = System.Text.ASCIIEncoding.ASCII.GetBytes("SEQUENCE");

然后您可以在文件中搜索此二进制文件。一种简单的暴力破解方法是从文件(即Stream.ReadByte)中读取字节,并将它们与这个"二进制"字节数组进行比较,看看是否可以找到匹配。(通过最小化需要读取和比较的字节数,您可以使用一些聪明的算法来更快更有效地完成此操作,并且缓冲/缓存策略可以显着提高所涉及的I/O性能,但我建议您在担心性能改进之前得到一些工作)

你可以从系统中使用ASCII.GetString()函数。文本命名空间从字节数组中读取字符串。

相关文章: