我想创建一个二进制文件并在其中存储字符串数据,我使用了这个示例:
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文件内容,他们不使用任何加密方法,那怎么样?我怎么能这样的数据呢?
现在我的问题是,当结果是字符串时,这个二进制写和文本写的区别是什么?
文件中的数据始终是"字节序列".在这种情况下,您编写的字节序列是"ASCII编码中表示文本'david stein'的字节".所以,是的,如果您在任何编辑器中打开文件,尝试以与ASCII兼容的方式将字节解释为文本,您将看到文本"david stein".实际上它只是一个字节的负载 - 这一切都取决于你如何解释它们.
如果你写了:
File.WriteAllText("c:\\test.data", "david stein", Encoding.ASCII);
Run Code Online (Sandbox Code Playgroud)
你最终会得到完全相同的字节序列.您可以通过多种方式创建具有相同字节的文件.没有任何关于File.WriteAllText将文件"标记"为文本的内容,并且没有任何关于FileStream或BinaryWriter将文件标记为二进制文件的内容.
编辑:来自评论:
我想在二进制文件中创建数据,直到用户无法通过记事本打开和读取我的数据
嗯,有很多方法可以做到这一点,具有不同的安全级别.理想情况下,您需要某种加密 - 但是读取数据的代码也需要能够解密它,这意味着它需要能够获得密钥.然后将问题转移到"我如何存储密钥".
如果您只需要验证文件中的数据(例如,检查它是否与其他地方的数据匹配),那么您可以使用加密哈希.
如果你只需要防止最随意的窥探者,你可以使用一些基本上只是混淆的东西 - 一种非常弱的加密形式,没有"密钥"本身.在这种情况下,任何编写代码的人都可以很容易地获取数据,但是你可能不太关心它.
这一切都取决于您的要求.