簡體   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