我想创建一个二进制文件并在其中存储字符串数据,我使用了这个示例:
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/