繁体   English   中英

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

[英]How to Check If File is Encrypted using AES (Rijndael)

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

我尝试使用File.GetAttributes()方法来检查加密,但它不起作用。

我需要一些有关检查文件是否已加密的方法的提示。

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

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

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

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

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

我希望确保明文 Y 只能由同时拥有密钥 Z 和密钥 Q 的人确定。(我可以想到一些我可能希望这样做的原因。)

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

你告诉我你的系统希望检测到 F 已经加密,然后拒绝用密钥 Q 加密它?

这似乎是个坏主意。 我可能用密钥 Q 加密文件,而不管它是否已经用密钥 Z 加密。

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

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

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

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

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

我建议在加密过程中用一些东西重命名加密文件,你可以在想要解密时检查它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM