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

标签 c#

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

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

但是当我在记事本中打开这个示例(test.data)创建的文件时,它里面有字符串数据(“david stein”),现在我的问题是,当结果是字符串?

我希望在二进制文件中创建一个数据,直到用户无法通过记事本打开和读取我的数据,如果用户在记事本中打开它会看到真正的二进制数据。

在某些文件中,当您在文本编辑器中打开主题时,您无法读取文件内容,例如 jpg 文件内容,它们没有使用任何加密方法,怎么办?我怎么能这样写我的数据?

最佳答案

now my question is that whats the difference between this binary writing and text writing when the result is string?

文件中的数据总是“字节序列”。在这种情况下,您写入的字节序列是 ASCII 编码中的“表示文本‘david stein’的字节”。所以是的,如果您在任何试图以与 ASCII 兼容的方式解释字节为文本的编辑器中打开该文件,您将看到文本“david stein”。但实际上它只是一堆字节 - 这完全取决于您如何解释它们。

如果你写了:

File.WriteAllText("c:\\test.data", "david stein", Encoding.ASCII);

你最终会得到完全相同的字节序列。您可以通过多种方式创建具有相同字节的文件。File.WriteAllText 与此无关。它将文件“标记”为文本,并且没有关于 FileStream 的信息或 BinaryWriter将文件标记为二进制文件。

编辑:来自评论:

I'm looking to create a data in binary file until user can not open and read my data by note pad

好吧,有很多方法可以通过不同级别的安全性来做到这一点。理想情况下,您需要某种加密 - 但随后读取数据的代码也需要能够对其进行解密,这意味着它需要能够获得 key 。然后将问题转移到“我如何存储 key ”。

如果您只需要验证文件中的数据(例如检查它是否与其他地方的数据匹配),那么您可以使用 cryptographic hash相反。

如果您只需要防止最随意的窥探者,您可以使用基本上只是混淆的东西 - 一种非常弱的加密形式,没有这样的“ key ”。在这种情况下,任何对您的代码进行 dce 编译的人都可以轻松获取数据,但您可能不太关心这一点。

这完全取决于您的要求。

关于c# - 为什么二进制数据写入的结果是字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12370367/

相关文章:

c# - Visual Studio 2008 Intellisense for Events 自动插入

c# - 具有多个数据成员的 IEnumerable

c# - 从字符串列名称动态创建 LINQ Select 表达式

c# - 有没有一种方法可以从字符串中删除空白字符?

c# - 仅当字符串不为 null 或空时附加逗号

c# - 如何确定三角形的方向/旋转?

c# - TestContext.Properties 可用吗?

c# - 不同的委托(delegate)用途

c# - 使用正则表达式将字符串拆分为 {curly} 子字符串,但包括 { }

c# - BlockingCollection 在 10 秒内不会重试