为什么二进制数据写入的结果是字符串?

mot*_*deh 2 c#

我想创建一个二进制文件并在其中存储字符串数据,我使用了这个示例:

FileStream fs = new FileStream("c:\\test.data", FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(Encoding.ASCII.GetBytes("david stein"));
bw.Close();
Run Code Online (Sandbox Code Playgroud)

但是当我在记事本中通过此示例(test.data)打开创建的文件时,它中包含字符串数据("david stein"),现在我的问题是,当结果是字符串时,这个二进制写入和文本写入之间的区别是什么?

我想在二进制文件中创建数据,直到用户无法通过记事本打开和读取我的数据,如果用户在记事本中打开它,请查看真正的二进制数据.

在一些文件中,当您在文本编辑器中打开主题时,您无法读取文件内容,如jpg文件内容,他们不使用任何加密方法,那怎么样?我怎么能这样的数据呢?

Jon*_*eet 8

现在我的问题是,当结果是字符串时,这个二进制写和文本写的区别是什么?

文件中的数据始终是"字节序列".在这种情况下,您编写的字节序列是"ASCII编码中表示文本'david stein'的字节".所以,是的,如果您在任何编辑器中打开文件,尝试以与ASCII兼容的方式将字节解释为文本,您将看到文本"david stein".实际上它只是一个字节的负载 - 这一切都取决于你如何解释它们.

如果你写了:

File.WriteAllText("c:\\test.data", "david stein", Encoding.ASCII);
Run Code Online (Sandbox Code Playgroud)

你最终会得到完全相同的字节序列.您可以通过多种方式创建具有相同字节的文件.没有任何关于File.WriteAllText将文件"标记"为文本的内容,并且没有任何关于FileStreamBinaryWriter将文件标记为二进制文件的内容.

编辑:来自评论:

我想在二进制文件中创建数据,直到用户无法通过记事本打开和读取我的数据

嗯,有很多方法可以做到这一点,具有不同的安全级别.理想情况下,您需要某种加密 - 但是读取数据的代码也需要能够解密它,这意味着它需要能够获得密钥.然后将问题转移到"我如何存储密钥".

如果您只需要验证文件中的数据(例如,检查它是否与其他地方的数据匹配),那么您可以使用加密哈希.

如果你只需要防止最随意的窥探者,你可以使用一些基本上只是混淆的东西 - 一种非常弱的加密形式,没有"密钥"本身.在这种情况下,任何编写代码的人都可以很容易地获取数据,但是你可能不太关心它.

这一切都取决于您的要求.

  • @motevallizadeh:你可以*绝对*读取文件内容.这只是文本数据.它根本不是试图伪装或隐藏flie内容 - 它只是JPEG文件格式.知道该文件格式的任何人都可以显示图像. (2认同)