記一個擦除硬盤數據,防止已刪除文件被恢復的程序

2017-11-02linux

 

前言

  對於機械硬盤而言,簡單地將某文件刪除掉刪的只是這一文件的「引用」而已,記錄這份文件的數據序列(機器碼)在硬盤中還是有跡可尋的。除非先前保存這一文件的這段存儲空間再次被其它文件序列覆蓋,不然藉助「文件恢復助手」軟件有很大概率能夠將剛刪掉的文件恢復過來,這對於某些敏感數據或者是某些相似「處女座」的人而言是不可接受的。還有另外一個場景,企業員工在離職時通常都要交還公司的電腦。交還電腦前刪除私人數據時簡單刪除刪不乾淨,徹底格式化硬盤又不可取,畢竟公司的電腦裏確定會有文件是公有的。因而便有了這一程序的設計動機,固然說到設計動機,更多的是本人以爲「好玩」。本程序工做機制爲:一、先簡單刪除掉私人文件;二、運行本程序,等待程序運行結束。工做原理便是在指定的目錄下生成隨機數據的文件,直至填滿該硬盤全部空間爲止。git

 

程序設計與實現

  一、本程序結構分爲兩部分。 a) 代碼; b) 配置文件(conf_.ini)github

    代碼部分負責處理邏輯問題。配置文件部分中記載着控制輸出的文件的信息以及部分程序運行控制開關。配置文件是以適配Java中Properties類的「鍵值對」形式保存的。windows

    

    關於配置文件的含義請參閱同目錄下的 " conf_ini_ReadMe.txt " 文件。安全

  二、程序流程圖以下:  app

  

 

 

 

 

 

 

 

 

 

 

 

 

  三、程序代碼簡介dom

  本程序爲純Java程序,可導入到Eclipse編譯運行,亦可經過命令行編譯運行。eclipse

  本程序共有四個類。測試

  

  CleanUp類是主方法類。DataWriter類負責根據配置文件中記載的信息,請求隨機數據,再將這些數據寫出到硬盤。ConfReader 類負責讀取配置文件中的信息。RandomGenerator類負責生成隨機數據。優化

 

  CleanUp

  主類在實例化之後即將 ConfReader 的實例做爲參數傳入DataWriter中。

  

  

  ConfReader

  讀取並解析配置文件中記載的信息,並將配置信息封裝成獨立的方法,供外部程序調用。

  

  關於配置文件的路徑,程序中設定了3個可能的路徑,目的是應對在不一樣環境(eclipse運行或命令行運行)下運行程序時防止找不到配置文件的問題。

  

  

  

  DataWriter

  在寫數據到文件以前首先會從ConfReader實例中取得所需信息。該操做在方法

1 private void applyProp(ConfReader cr)

  中執行。其中,關於文件輸出目錄,若在配置文件中配置有正確的輸出路徑(所填寫的路徑中,全部出現的文件夾都必須存在,不然便視爲不正確的路徑),則使用配置的路徑做爲輸出目錄,不然,使用程序運行的盤符的根目錄做爲輸出目錄。

  輸出目錄配置項爲  ,讀取輸出目錄配置信息的代碼爲:

  

  上圖所示代碼第159行的條件判斷若成立,則代表配置文件中配置的輸出目錄無效,接下來便會讀取程序所在盤符的根目錄。第163行判斷的目的是爲了區分windows系統與linux系統。

  文件的輸出還有「追加」模式可選。當設置爲「追加」模式時,寫文件前會首先檢查指定的目錄下是否有名稱爲本程序指定的前綴與後綴的文件,如有,則在它們的最後一個文件以後追加文件,而不是覆蓋已有的文件,此選項默認是開啓的。

  隨後即是根據配置的文件數量與大小來循環寫出到硬盤了。

  

  RandomGenerator

   經過Math.random生成隨機數據,該類僅包含兩個普通方法。

1 public byte getRandomCharIndex(long range)
2 
3 public byte[] getRandomCharactor(long range, int length)

 

  完整的程序思想請參閱源代碼。

 

測試

  在本人的筆記本電腦中開闢一塊1G大小的硬盤分區做爲測試盤符。在該盤中模擬存入文件數據,而後刪除它們,再運行本程序,經過文件恢復軟件對比先後被刪除的文件的可恢復性。

  一、建立新硬盤分區 E 盤並執行徹底格式化操做,容量1.07GB  ;

    

  二、使用文件恢復軟件掃描該盤可恢復文件;

    

    E盤下當前沒有可恢復的文件。

  三、模擬存入幾份數據文件到E盤,而後刪除它們,再使用文件恢復軟件掃描;

      存入幾種不一樣類型的文件。

    刪除(包括清空回收站)掉它們後,經過文件恢復軟件掃描:

    

    恢復所列全部文件。

    

    打開它們,徹底沒毛病,完整地恢復了過來。

    

  四、運行本文所述程序,填滿E盤硬盤空間,隨後再刪除全部文件。

    

    先前能夠被恢復的文件已經所有不見,證實文件在硬盤中已經徹底被抹去,刪掉的文件已經沒法被恢復。

    

 

後記

  本程序可以有效擦除機械硬盤中的數據文件信息。可以有效保障數據安全與安撫員工心靈。

  總得來講,想要徹底刪除一份文件,能夠有以下幾種辦法:

    一、徹底格式化硬盤分區(格式時不要勾選「快速格式化」選項)

    二、刪除掉數據(固然要清空回收站)文件後往硬盤存入其它文件(只要破壞掉原文件數據序列便可,只要硬盤中的數據序列不足以拼湊成一個完整的文件便可,也不是說必定要把全部數據抹去,固然,最保險的方式就是抹去全部數據序列痕跡)

    三、刪除掉文件後運行一下本文所述程序

    四、其它我不知道的方法

  本文所述程序是本人在倉促之間完成的,並未通過嚴格的測試,故而不能保證程序運行的穩定性與有效性。按理說本程序在生成完隨機數據文件後應該再自動刪掉這些文件的,可是本程序沒有作這一功能。本程序在效率方面也還有提高的空間,在本文所示的測試例子中填滿1GB的空間耗時27秒。總而言之,倉促之做,僅供參考,若有考慮不周之處,還望各位看官海涵。至於代碼的優化工做就後面再說了。

 

源代碼:  https://github.com/chorm590/CleanUp.git

相關文章
相關標籤/搜索