2014-01-18 30 views
0

我對C#相對比較陌生,並且試圖將我在wxMaxima中設計的文本加密算法調整爲使用Visual Studio窗體的C#中的二進制加密程序。由於我對讀取/寫入二進制文件不熟悉,因此缺乏關於在嘗試讀取或寫入文件流時發生的情況的知識。System.IO - BinaryReader/Writer是否正確讀取/寫入文件包含的內容? (抽象概念)

例如,我不想象過去那樣對文本文件進行加密,而是想要加密可執行文件或任何其他形式的二進制文件。

這裏有幾個問題我不明白:

  1. 當我打開一個文件流和使用BinaryReader在將它在絕對一切文件中的絕對的重複閱讀?例如,我希望能夠讀取整個文件,刪除原始文件,然後用舊名稱創建一個新文件並將整個二進制流寫回。這會重現原始文件嗎?還是會有某種形式的腐敗,否則必須解釋?

  2. 因爲它是一個加密程序,所以我希望在刪除原始文件之前添加一個低級「格式化」功能,因此通過梳理硬盤的物理數據在理論上是無法訪問的。如果我使用二進制打字機重寫原始文件的一部分,將其放在硬盤上的相同位置,或者文件會變成碎片,實際上只是通過FAT重定向到硬盤的其他部分?顯然,如果原始文件沒有覆蓋硬盤上的原始文件羣,那麼用原始文件覆蓋原始文件就沒有意義了。

回答

1

對於你的第一個問題:A BinaryReader是不是你想要的。這個名字有點讓人誤解:它「以特定的編碼方式將原始數據類型讀爲二進制值。」你可能想要一個FileStream

關於第二個問題:這並不容易:請參閱SDelete的「如何使用SDelete」一節中的解釋。在未來鏈接中斷的情況下進行簡要提取:

「安全刪除沒有特殊屬性的文件相對比較簡單:安全刪除程序只是用安全刪除模式覆蓋文件。更棘手的是安全刪除Windows NT/2K壓縮,加密和稀疏文件,並安全地清理磁盤空間

壓縮,加密和稀疏由NTFS在16個羣集塊中進行管理如果程序寫入這樣的一個存在的部分文件NTFS在磁盤上分配新空間以存儲新數據,並且在新數據寫入後,釋放之前由該文件佔用的集羣。「

+0

非常感謝您的信息。我想你會打開一個文件流,然後使用binaryreader來閱讀它。 我很擔心NTFS系統在做這件事(不敢相信我稱之爲FAT--這是自從我讀完基本計算機科學體系結構以來已經過了多長時間)。 我會做更多的研究,看看我能否創建一些讓我通過指針/ ref訪問硬盤的東西。我並沒有真正使用它 - 只是讓它磨練技能。但是,放棄它並不會有什麼傷害,所以我寧願給人這樣的選擇。 – ThisHandleNotInUse