2011-12-14 13 views
5

C'è una gemma o un mezzo per cancellare in modo sicuro un file in Ruby? Mi piacerebbe evitare programmi esterni che potrebbero non essere presenti sul sistema.Come posso cancellare in modo sicuro un file?

Con "cancellazione sicura" mi riferisco alla sovrascrittura del contenuto del file.

risposta

3

Se siete su * nix, un buon modo sarebbe quello di chiamare solo brandello utilizzando exec/Open3/open4:

`shred -fxuz #{filename}` 

http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html

Scegli questa simile messaggio:

Writing a file shredder in python or ruby?

+1

_ "Desidero evitare i programmi esterni che potrebbero non essere presenti nel sistema." _ Suppongo che non si possa assumere quale sistema operativo è utilizzato, ma si desidera da eseguire ovunque venga eseguito Ruby. – Phrogz

2

solo

  1. aprire il file
  2. scrivere dell'immondizia almeno in quantità pari alla dimensione del file corrente
  3. flush() e close()
  4. ripetere N volte, mescolando immondizia con zeri e 0xff 's su diversi passa
+0

Perché non mostrare un esempio di codice? –

3

Qualcosa di simile ti farà iniziare:

#!/usr/bin/env ruby 

abort "Missing filename" if (ARGV.empty?) 

ARGV.each do |filename| 
    filesize = File.size(filename) 
    [0x00, 0xff].each do |byte| 
    File.open(filename, 'wb') do |fo| 
     filesize.times { fo.print(byte.chr) } 
    end 
    end 
end 

Si dovrebbe ottenere clo SE.

Per maggiore accuratezza, è inoltre possibile utilizzare 0xaa e 0x55 per alternare 0 e 1 bit nel byte. Random.rand(0xff) fornirà un valore casuale compreso tra 0 e 255.