簡體   English   中英

加密/解密初學者問題

[英]Encrypt/Decrypt Beginner Questions

我從來沒有做過任何加密或解密,所以我決定跳進去嘗試做一些類似於 FolderLock 的東西。 以下題多為設計題,但夾雜一些編碼題。

http://www.newsoftwares.net/folderlock/

無論如何,我還處於初始階段,並且有一些初步問題。

  1. 加密文件夾時,實際上是在加密文件夾內的所有文件,而不是文件夾本身,因為文件夾無法加密。 那是對的嗎?

  2. 另外,我已經編寫了我的加密/解密代碼,但我想同時包含一個密碼。 我的計划是,當用戶選擇一個文件夾/文件進行加密時,讓他們設置一個密碼,該密碼將鏈接到解密文件夾/文件所需的密鑰。 好主意還是壞主意? 有人有更好的建議嗎? 我正在討論為程序本身設置一個密碼,該密碼也可以解鎖任何加密的文件/文件夾......

  3. 如何更改 Windows 7 中的文件夾(我已加密)以在打開時詢問密碼,而不僅僅是打開並顯示所有加密文件?

  4. 最后,當你加密一個文件時,(我的代碼目前是如何編寫的)你最終會得到你加密的原始文件和該文件的加密版本。 我確定我知道這個問題的答案,但是我要刪除原始版本並保留加密版本嗎? 如果由於某種原因解密失敗並且我沒有文件備份怎么辦? 我也應該創建文件備份嗎?

感謝您的幫助,我確實嘗試用谷歌搜索上述問題,但似乎大多數這樣做的人都比我高得多。 所以我沒有找到很多有用的答案。

編輯:讓我解釋一下,雖然我正在嘗試創建類似於 FolderLock 的東西,但這只是為了我的教育。 我不是想創建一個商業上可行的應用程序,只是在做一些有趣的事情並同時學習。

如何加密文件和文件夾並不是一個只有一個答案的問題。 當我們談論 Windows 環境時,您可以在大約三個不同的級別加密文件:

  1. 硬盤加密:在這種情況下,您將加密整個硬盤,這意味着整個磁盤都已加密。 BitLocker就是一個例子。 在這種情況下,您將加密除主引導記錄之外的所有內容。 寫入硬盤的每個字節都經過加密,包括操作系統。

  2. 過濾器驅動程序或文件系統加密:您可以編寫自己的過濾器驅動程序或文件系統驅動程序,以便在將文件寫入磁盤時選擇性和透明地加密和解密文件。 大多數以業務為目標的加密解決方案都提供這種功能。 Microsoft 有自己的加密文件系統形式的解決方案。 這樣做的好處是它與操作系統更好地集成,加密的文件和文件夾在所有其他應用程序中看起來就像普通文件。 TrueCrypt是另一個執行這種加密的程序,它是開源的,所以你可能想看看它。

  3. 應用程序級別加密:您還可以在應用程序級別加密文件。 如果您不編寫自己的過濾器驅動程序,您將無法超越此級別。 這意味着您加密文件的方式與使用 WinZip 壓縮文件的方式類似。 其他應用程序可以看到加密文件作為不同格式的文件,而不是原始格式。 本質上,它與使用 WinZip/WinRAR 壓縮文件沒有太大區別,只是不是壓縮而是加密它。 如果你用 WinZip 壓縮一個文件夾,它仍然會被壓縮成一個文件。 如果您要在此級別進行加密,則與加密相同。 您可以為 Windows Explorer 編寫 shell 擴展,使其“看起來”像一個文件夾,但本質上它仍然是一個文件,您將無法從另一個應用程序“另存為..”到該文件夾中。 例如,如果您雙擊該文件,您可能還需要提供一個用於瀏覽文件夾的 GUI。

我假設您正在尋找編寫一個將在應用程序級別進行加密的應用程序。 在這種情況下,您應該意識到我上面提到的這種方法的局限性。

至於你的問題:

  1. 您可以將文件夾加密到一個容器中,再想想 WinZip/WinRar,或者您可以將文件夾中的每個文件單獨加密到單獨的文件中。

  2. 對於密碼/密鑰的使用,我的建議是使用隨機密鑰來加密實際數據。 然后,您使用從一個或多個密碼派生的密鑰在單獨的密鑰槽中加密此密鑰。 這將允許您為一個文件設置多個密碼。 至於算法,我推薦 AES-128,因為它是一種經過充分驗證且速度非常快的算法。 要使用 AES,您需要創建具有特定長度的密鑰和 IV(每個 AES-128 128 位)。 創建這些密鑰的最佳方法是將Rfc2898DeriveBytes與用戶輸入的實際密碼一起使用。 不要忘記HMAC ,您應該使用它來驗證文件的實際解密是否正確。 您可以使用 HMAC 僅驗證隨機密鑰是否已正確解密,這意味着您無需對整個內容運行 HMAC。

  3. 為此,您需要編寫一個 shell 擴展,但這只會讓您到目前為止。 例如,您將無法將 word 中的文件保存到加密文件夾中,因為這實際上只是加密文件的容器格式。

  4. 我建議您將其留給用戶來創建文件備份。 任何被刪除的文件也應該被安全地擦除,因為簡單的刪除不足以從文件系統中刪除文件的所有痕跡。

  1. 文件夾只是文件的集合。 就您的應用程序而言,它可以只加密文件夾的內容。
  2. 您應該使用密碼來派生密鑰。 在 .NET 中,您可以使用Rfc2898DeriveBytes來做到這一點。 這意味着您甚至沒有存儲密鑰。 密碼鑰匙。 如果可以避免,切勿自己保留鑰匙。 這樣,攻擊者的唯一選擇就是蠻力; 逆向工程不會產生任何有用的東西。
  3. 您可能必須編寫一個shell 擴展來做到這一點。 那是完全不同的主題。 (我希望您對 COM 互操作/PInvoke 感到滿意)。
  4. 這一切都取決於您想要多少“驗證”。 例如,您可以計算原始文件的 SHA-256 hash; 加密它; 然后解密它; hash 解密文件; 並確保哈希匹配。 訣竅是將所有這些作為原子操作來完成。 您可能還希望存儲未加密文件的 SHA-256(即使在刪除未加密內容之后),以便稍后解密時; 您可以驗證它是否正確完成。 在這種情況下,您使用 hash 作為校驗和。
  1. 是和不是。 文件系統有加密標志,可以應用於文件夾。 這很重要,因為在該文件夾中創建的新文件將被自動加密。 但是,文件夾本身並未加密。

  2. 我不太明白......如果它像 TrueCrypt 一樣工作,那么這是個好主意。

  3. 哪個密碼? Anyway, if it is your encryption method, then you must dig deep into Windows Shell API and objects, and I am not quite sure that such extension is possible with .NET (I think I read somewhere that it is not, actually that it would from我忘記失敗的某些原因)

  4. 我不明白為什么解密會失敗。 顯然任何事情都可能發生故障,包括硬盤驅動器,但是每個文件都可能發生故障,您無法避免這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM