创建一个只能由我的程序使用的文件。我如何区别于其他程序的文件?

时间:2014-11-08 12:21:22

标签: c# file file-io

我使用File.WriteAllBytes()创建文件。传递给File.WriteAllBytes()的字节[]由我自己的算法加密。您需要在加密文件(程序用户知道密码)时使用的密码来解密它。但是当我的程序使用File.ReadAllBytes()打开某个文件时,有3种情况:

  1. 正在打开的文件是我的程序文件,用户知道要打开它的密码。
  2. 正在打开的文件是我的程序文件,但是用户并不知道要打开它的密码。
  3. 正在打开的文件不是我的程序文件。
  4. 第一个很容易处理。第2和第3对我的程序是相同的,因为我的程序不知道某个随机文件的加密byte []和byte []之间的区别。

    我如何区分这些情况?我想在将一些字节序列添加到byte []的结尾或开始之前将其传递给File.WriteAllBytes()。这样安全吗?现代程序如何将文件与其他文件区分开来?

2 个答案:

答案 0 :(得分:4)

您可以在加密之前为文件提供一些结构,并在解密后检查结构是否存在。如果结构不存在,则不是您的文件。

例如,您可以计算校验和,并将其存储在"有效载荷"之前的前几个字节中。数据块。加密校验和以及文件的其余部分。

解密时,获取有效内容,然后再次计算其校验和。将存储的结果与计算结果进行比较,以查看两者是否匹配。如果他们不匹配,则不是您的文件。如果他们匹配,很有可能是你的档案。

这不是唯一的方法 - 结构可以是您想要的任何内容,从在特定位置放置特殊字节序列到为您的内容使用特定严格格式(例如XML),然后在之后验证此格式解密。

  

[文件]由我自己的算法加密。

通过默默无闻的安全性非常小心:提出一种加密安全的算法是一项非常艰巨的任务。

答案 1 :(得分:2)

许多文件格式使用"魔术数字"在文件前面确定它们的类型。使用前4个字节,编写自定义序列,然后在加载文件时读取它。