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

fox*_*eSs 5 c# file-io file

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

  1. 正在打开的文件是我程序的文件,用户知道打开它的密码.
  2. 正在打开的文件是我程序的文件,但是用户不知道打开它的密码.
  3. 正在打开的文件不是我程序的文件.

第一个很容易处理.第二个和第三个对我的程序是相同的,因为我的程序不知道某个随机文件的加密byte []和byte []之间的区别.

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

das*_*ght 4

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

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

解密时,获取有效负载内容,并再次计算其校验和。将存储的结果与计算的结果进行比较,看看两者是否匹配。如果它们不匹配,则这不是您的文件。如果它们确实匹配,则很有可能这是您的文件。

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

[该文件]是用我自己的算法加密的。

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