如何使用AES(Rijndael)检查文件是否加密

时间:2010-03-05 19:55:12

标签: c# encryption aes

我在C#中使用'RijndaelManaged'和'CryptoStream'类来加密文件。在加密文件之前,我想检查文件是否已加密。

我尝试使用File.GetAttributes()方法检查加密,但它无效。

我需要一些关于如何检查文件是否已加密的提示。

6 个答案:

答案 0 :(得分:9)

没有任何类型的自定义标头,绝对确保文件加密的唯一方法是尝试解密它。

如果您尝试压缩文件并且文件变小,则极不可能加密。如果字节值的分布不均匀(包括纯文本!),则不太可能加密。

这些启发式方法取决于加密的正确执行。如果AES一次应用于一个文件块,那么结果中可能会显示模式,但由于您使用的是CryptoStream,因此这不应该是一个问题。

如果您自己的代码将始终用于加密和解密文件,那么您应该考虑添加一个自定义标头,表明它是一个加密文件。

答案 1 :(得分:5)

假设我有一个包含密文X的文件F,它是带有密钥Z的明文Y的加密。

我希望确保明文Y只能由拥有密钥Z和密钥Q的人来确定。(我可以想出为什么我可能希望这样做的原因。)

因此,我希望用密钥Q加密已经加密的文件。

您告诉我您的系统希望检测到F已经加密,然后拒绝使用密钥Q对其进行加密?

这似乎是一个坏主意。我可能想要用密钥Q加密文件,无论它是否已经用密钥Z加密。

答案 2 :(得分:1)

您必须检查文件并查找文件加密时不存在的结构或字节字符串。您需要为您正在处理的每种类型的文件单独进行测试。

答案 3 :(得分:0)

如果文件已加密,它将显示为随机字节流。你可以:

  • 尝试打开文件和/或确认它是预期的格式(JPG,ZIP,等等)。如果文件与已知格式匹配,那么您就知道它已被解密。

  • 如果您有密钥,则尝试解密文件,然后重复上一步。如果它现在与已知格式匹配,那么您知道它(是?)已加密。

答案 4 :(得分:0)

设置你的加密方法bool类型,如果文件可以解密,那么方法返回true表示文件已加密,否则方法抛出异常并返回false表示文件无法解密,或者说文件不是加密。

答案 5 :(得分:0)

我建议在加密过程中对加密文件进行重命名,以便在解密时对其进行检查。