我在C#中使用'RijndaelManaged'和'CryptoStream'類來加密文件。在加密文件之前,我想檢查文件是否已經加密。如何檢查文件是否使用AES加密(Rijndael)
我嘗試使用File.GetAttributes()
方法檢查加密,但它不起作用。
我需要一些關於如何檢查文件是否已經加密的提示。
我在C#中使用'RijndaelManaged'和'CryptoStream'類來加密文件。在加密文件之前,我想檢查文件是否已經加密。如何檢查文件是否使用AES加密(Rijndael)
我嘗試使用File.GetAttributes()
方法檢查加密,但它不起作用。
我需要一些關於如何檢查文件是否已經加密的提示。
沒有任何自定義標題,唯一能夠絕對確定該文件是加密的方法是嘗試對其進行解密。
如果您嘗試壓縮文件並且文件變小,那麼它極不可能被加密。如果字節值的分佈不均勻(包括純文本!),則不太可能加密。
這些啓發式依賴於正確執行加密。如果一次將AES應用於一個文件,那麼結果中會出現patter,但由於您使用的是CryptoStream,因此這不應該成爲問題。
如果您自己的代碼將永遠用於加密和解密文件,那麼您應該考慮添加一個自定義標題,指出它是一個加密文件。
如果文件被加密,它將顯示爲隨機字節流。您可以:
嘗試打開文件和/或確認它是預期格式(JPG,ZIP,無論)。如果文件匹配一個已知的格式,那麼你知道它被解密。
嘗試解密文件,如果您有密鑰,然後重複上一步。如果它現在匹配一個已知的格式,那麼你知道它是(被?)加密的。
您必須檢查文件並查找結構或字節字符串,如果該文件被加密,則該字符串不會存在。您需要針對您正在處理的每種類型的文件進行單獨測試。
假設我有一個包含密文X,這是明文的Y與Z的鑰匙的加密一個文件F
我希望確保明文Y可以僅由人誰擁有這兩個鍵Z和重點確定Q.(我能想到的一些原因,爲什麼我會想這樣做。)
因此,我希望加密與密鑰Q.
你告訴我,你的系統中已經加密的文件希望檢測到F已經被加密,然後拒絕用密鑰Q加密它?
這似乎是一個壞主意。我可能想要用密鑰Q加密文件,而不管它是否已經用密鑰Z加密。
我同意你的看法,多重加密是一個好主意。但我只是想看看是否有任何方法可以通過它來查找文件是否已被加密。 – Mako 2010-03-06 06:39:36
設置你的加密方法bool類型,如果文件可以解密,那麼方法返回true,表示文件被加密,否則方法拋出異常並返回false,表示文件不能被解密,或者說文件是不加密。
添加自定義標題看起來是個不錯的主意:)會試一試 – Mako 2010-03-06 06:42:39