我使用File.WriteAllBytes()
创建文件。传递给File.WriteAllBytes()
的字节[]由我自己的算法加密。您需要在加密文件(程序用户知道密码)时使用的密码来解密它。但是当我的程序使用File.ReadAllBytes()
打开某个文件时,有3种情况:
第一个很容易处理。第2和第3对我的程序是相同的,因为我的程序不知道某个随机文件的加密byte []和byte []之间的区别。
我如何区分这些情况?我想在将一些字节序列添加到byte []的结尾或开始之前将其传递给File.WriteAllBytes()
。这样安全吗?现代程序如何将文件与其他文件区分开来?
答案 0 :(得分:4)
您可以在加密之前为文件提供一些结构,并在解密后检查结构是否存在。如果结构不存在,则不是您的文件。
例如,您可以计算校验和,并将其存储在"有效载荷"之前的前几个字节中。数据块。加密校验和以及文件的其余部分。
解密时,获取有效内容,然后再次计算其校验和。将存储的结果与计算结果进行比较,以查看两者是否匹配。如果他们不匹配,则不是您的文件。如果他们匹配,很有可能是你的档案。
这不是唯一的方法 - 结构可以是您想要的任何内容,从在特定位置放置特殊字节序列到为您的内容使用特定严格格式(例如XML),然后在之后验证此格式解密。
[文件]由我自己的算法加密。
通过默默无闻的安全性非常小心:提出一种加密安全的算法是一项非常艰巨的任务。
答案 1 :(得分:2)
许多文件格式使用"魔术数字"在文件前面确定它们的类型。使用前4个字节,编写自定义序列,然后在加载文件时读取它。