Sicheres Löschen von Dateien

AltesEisen

Mitglied
Hallo liebes Forum.
Ich möchte ein Programm entwerfen, das Dateien sicher löscht-. das heißt die Dateien an der richtigen Speicheradresse mit Nullen oder Einsen überschreibt. Nach meinem Wissen werden beim herkömmlichen Löschen unter Windows der Speicher bloß freigegeben aber nicht überschrieben, was das Löschen unsicherer macht.
Ich gehe dabei so vor:
[CODE lang="java" title="Sicheres Löschen"]private static String dateiString = "" ;
private static String f = System.getProperty("file.separator");
private static String filePath = "." + f + "src" + f + "Test.txt";
private static File file = new File(filePath);

inputStream = new FileInputStream(file);

while (( i= inputStream.read()) != -1) {
char c="0";
dateiString = dateiString + c;
}

OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(file);
outputStream.write(dateiString.getBytes());
} catch (Exception e) {
} finally {
outputStream.close();
}

[/CODE]

Macht der Code genau das was er soll oder bin ich auf dem Holzweg?
Danke für Antworten.
 

ing0-bing0

Aktives Mitglied
Du bist auf dem Holzweg.

Mit FileChannel kommst du am nächsten an das Filesystem heran -- allerdings nicht so nahe, um an einer bestimmten Stelle auf dem Speichermedium schreiben zu können.
 

KonradN

Super-Moderator
Mitarbeiter
Dein Weg ist extrem dubios.
a) Wieso musst Du denn da einen String mit "0" aufbauen? Wenn Du einen Dateiinhalt überschreiben willst, dann reicht es doch, die Länge abzufragen um dann entsprechende 0en zu schreiben.
b) Wieso denn über ein String und getBytes? Da kommen dann Dinge rein wie Encoding. Und eigentlich willst Du ja auch nicht "0" Zeichen sondern 0x00 Bytes schreiben, oder nicht?
c) Du schreibst eine neue Datei die den gleichen Namen hat, daher ist es sehr gut möglich, dass eben die alte Datei normal gelöscht wird und die neue Datei dann halt mit Deinen "0"er geschrieben wird. Wenn Du den Inhalt der Datei überschreiben willst, dann wäre RandomAccessFile vermutlich das, was Du nutzen willst.

Und generell mit sowas aufpassen - Bist Du sicher, dass Du dies so wirklich haben willst? Der Ansatz ist generell sehr dubios. Wenn Du Daten auf dem Datenträger hast, die kritisch sind, dann würde ich diese nicht unverschlüsselt drauf haben. Und wenn der Datenträger weg gegeben wird, dann würde ich den Datenträger selbst entsprechend löschen - bzw der Datenträger wäre dann eh verschlüsselt gewesen und dann wäre das auch kein Thema.
 

Neumi5694

Top Contributor
Nullen sind übrigens auch gar nicht mal so sicher, eine Restladung mag noch übrig bleiben. Zufallswerte sind besser geeignet.
Ich würde aber einfach ein bereits existierendes Tool dafür verwenden, gibt ja reichlich davon.
 

Oneixee5

Top Contributor
Es gibt noch ein weiteres Problem. Auf Solid State Drives lassen sich Dateien nicht so einfach wie auf den guten alten Magnetspeichern überschreiben. Das Betriebssystem weiß einfach nicht so genau wie einzelne Dateien/Teile liegen. Zusätzlich haben SSD einen Schutz vor dem versehentlichen Löschen durch bösartige Software. Die SSD allein legt fest was wie geschrieben wird. Zum sicheren Löschen/Überschreiben auf SSD sind idR. nur die Tools der Hersteller fähig. Es ist aber möglich, dass eine SSD dabei zerstört wird.
Auf einer HDD oder USB-Sticks hast du aber gute Chancen die Dateien zu überschreiben. Trotzdem würde ich eher auf verschlüsselte Dateisystem, -container oder Laufwerke setzen, um zu verhindern, dass gelöschte Daten öffentlich werden.
 

Robert Zenz

Top Contributor
Desweiteren kannst du die java.nio API verwenden, dann ersparst du dir das haendische knuepfen von Pfaden.

Wie die anderen schon sagten, wenn du vom Userspace aus so etwas machen willst, stehst du auf verlorenen Posten. Mindestens musst du dich dafuer im Kernel befinden, in dem Dateisystem-Treiber, ansonsten kannst du einfach keinerlei Aussagen ueber das machen was du gerade schreibst. Und selbst dann kann dir die Hardware was vom blauen Himmel vorluegen.

Auf einer HDD oder USB-Sticks hast du aber gute Chancen die Dateien zu überschreiben. Trotzdem würde ich eher auf verschlüsselte Dateisystem, -container oder Laufwerke setzen, um zu verhindern, dass gelöschte Daten öffentlich werden.

Fuer USB-Sticks gilt das meines Wissens nach nicht, die sind genau so ein Flash-Speicher, und was der Controller macht ist komplett undurchsichtig fuer uns. Fuer "normale" Festplatten ist das schon richtig, gilt aber auch nur noch bedingt. Klar, wenn du so ein dummes Dateisystem wie FAT32 oder NTFS hast dann schon, aber sobald du dich ueber den Schrott hinaus bewegst, ext4, BTRFS, XFS und so weiter, hast du das auch nicht mehr. Journaling, Deduplication, Snapshots, Compression, Encryption, all das wirft dir da einen Stock zwischen die Beine. Und dann gibt es noch Hybrid-Festplatten und den Festplatten-Cache.

Das Thema ist alles andere als simpel geworden in den letzten zwei Jahrzehnten.

Das Betriebssystem weiß einfach nicht so genau wie einzelne Dateien/Teile liegen.

Um jetzt auf Kleinigkeiten herumzureiten, aber das Betriebssystem weisz gar nicht wo die Daten liegen. Selbst wenn die SSD dir einen Sektor mit einer fixen Nummer berichtet, ist das nur Emulation und die Nummer hilft dir gar nichts.

Und als Unterhaltung zu dem Thema, die Geschichte der magischen, chinesischen Festplatte.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T sicheres Löschen von Dateien Allgemeine Java-Themen 14
D sicheres hardgecodetes passwort? Allgemeine Java-Themen 18
M löschen in Rot Schwarz Bäumen Allgemeine Java-Themen 6
M lineare Sondierung löschen Allgemeine Java-Themen 2
E Varialbe komplett Löschen Allgemeine Java-Themen 26
O Warum kann ich so keine Elemente löschen und erhalte einen IllegalStateException? Allgemeine Java-Themen 4
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
glamdring273 Discord JDA, Kanal löschen Allgemeine Java-Themen 0
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
X Größten Werte in meinem Array löschen? Allgemeine Java-Themen 16
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
S Einzigartigen String in Datenbank finden und löschen Allgemeine Java-Themen 23
J Datei löschen, die Leerzeichen im Pfad hat Allgemeine Java-Themen 5
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
A Referenzen von Bildobjekten löschen Allgemeine Java-Themen 0
I PDF freigeben zum löschen Allgemeine Java-Themen 4
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
P JDK installieren Kann man die Ordner in C:\Users\*\AppData\LocalLow\Sun\Java\.... löschen? Allgemeine Java-Themen 3
X Löschen von einer Zeile in einer Text Datei. Klappt nicht. Allgemeine Java-Themen 4
J Java - Zeile aus Text datei löschen Allgemeine Java-Themen 13
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
G Datei löschen Allgemeine Java-Themen 8
R LinkedList und Threads: Strukturprobleme bez. löschen von Elementen Allgemeine Java-Themen 3
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
L Doppelte eintraege im Stringbuffer löschen Allgemeine Java-Themen 4
J Doppelte Buchstaben löschen - letztes Wort macht er nicht Allgemeine Java-Themen 2
M lucene suchen/löschen/hinzufügen Allgemeine Java-Themen 4
R Leere Verzeichnisse löschen Allgemeine Java-Themen 11
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
V System.out.println an jeder Stelle im Projekt löschen Allgemeine Java-Themen 4
M Batch zum Java Cache löschen Allgemeine Java-Themen 3
R Löschen von Files nicht möglich Allgemeine Java-Themen 11
KrokoDiehl Verzeichnisse via FileVisitor löschen Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
127.0.0.1 StringBuffer leere Zeile löschen Allgemeine Java-Themen 8
J char-Array löschen Allgemeine Java-Themen 5
W n:m Beziehung Referenzen löschen Allgemeine Java-Themen 5
127.0.0.1 Zeilen in .txt Datei löschen Allgemeine Java-Themen 11
D Löschen-Methode im Stapelverarbeitungsprogramm Allgemeine Java-Themen 4
S JTable und Spalten löschen Frage Allgemeine Java-Themen 5
EnHancEd[] ArrayList gezielt löschen Allgemeine Java-Themen 9
S Nullen aus Array löschen Allgemeine Java-Themen 10
N Java lässt sich nicht löschen! Allgemeine Java-Themen 7
U Wie kann mit einen Java Applet Dateien erstellen,verschieben und löschen? Allgemeine Java-Themen 9
P Input/Output Ordner löschen --> geht nicht Datei --> Ja Allgemeine Java-Themen 6
K Leerzeiilen aus ArrayList löschen?! Allgemeine Java-Themen 7
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
S Singleton Instanz löschen Allgemeine Java-Themen 5
Z Ausschneiden, Kopieren, Einfügen, Löschen in JTextArea Allgemeine Java-Themen 5
K Java Feld Duplikate löschen Allgemeine Java-Themen 5
F SAXBuilder blockiert löschen von Dateien Allgemeine Java-Themen 2
L Datei sicher löschen/mehrfach überschreiben? Allgemeine Java-Themen 2
S Java komplett löschen und neu installieren Allgemeine Java-Themen 4
N Java geht nicht mehr zu löschen Allgemeine Java-Themen 5
E Regex alles nach ? löschen Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
W 2D-Grafik nach getthumbnail läst sich Quellbild nicht mehr löschen Allgemeine Java-Themen 3
E Regex HTML Tag und Inhalt löschen Allgemeine Java-Themen 4
S Zeilen in einer Datei löschen Allgemeine Java-Themen 3
Z aus private List<???> list eintrag löschen Allgemeine Java-Themen 4
C Zeile aus einer CSV-Datei löschen Allgemeine Java-Themen 3
J Element aus HashSet löschen Allgemeine Java-Themen 2
S Element aus ArrayListe löschen --> Thread hängt sich auf Allgemeine Java-Themen 2
A LinkedList Auslesen und Objekt Löschen Allgemeine Java-Themen 4
G Mit Batch-Datei verzeichnisse löschen Allgemeine Java-Themen 9
K von List getSelected auf ResultSet Datenbank löschen Allgemeine Java-Themen 2
S Reihen aus einem 2-dim. Array 'löschen' Allgemeine Java-Themen 2
K Threading - schreiben auf Hashmap/löschen - ConcurrentModificationException Allgemeine Java-Themen 3
A Zeilen aus einer Textdatei löschen Allgemeine Java-Themen 6
M Arraylist - Inhalte in Textferldern anzeigen, verändern und löschen. Allgemeine Java-Themen 18
S Liste Object Löschen Allgemeine Java-Themen 7
G Log4J - Logs älter als 3 Tage löschen Allgemeine Java-Themen 5
Quaxli Files massenhaft löschen Allgemeine Java-Themen 3
J Mit POI Zeile in Excel löschen Allgemeine Java-Themen 5
D Kann Tiff Datei nicht löschen Allgemeine Java-Themen 12
0x7F800000 Regex zum löschen vom unnötigen whitespace Allgemeine Java-Themen 4
Daniel_L Best Practice zum Löschen von Log-Files? Allgemeine Java-Themen 8
S Problem beim Löschen des Inhalts des Fensters Allgemeine Java-Themen 4
O Zeile eines Textfiles löschen Allgemeine Java-Themen 2
O File zum löschen "schließen" Allgemeine Java-Themen 2
G JTree Node löschen Allgemeine Java-Themen 2
C String to hex und hex-Werte löschen Allgemeine Java-Themen 2
H Benutzerkonto löschen Allgemeine Java-Themen 4
G Dateien löschen Allgemeine Java-Themen 3
G Datei löschen nach kopieren geht nicht Allgemeine Java-Themen 5
G List- Einträge löschen Allgemeine Java-Themen 3
T probleme mit file löschen Allgemeine Java-Themen 9
F Aus einer XML Datei löschen Allgemeine Java-Themen 3
M Endgültiges Löschen von Objekten Allgemeine Java-Themen 7
H JTable Löschen [Alle Zeilen aufeinmal Löschen] Allgemeine Java-Themen 6
Z Letztes zeichen eines strings löschen Allgemeine Java-Themen 3
S Löschen von Objekt erzwingen Allgemeine Java-Themen 4
T LDAP - Eintrag löschen Allgemeine Java-Themen 6
J Alte Log Files löschen mit log4j Allgemeine Java-Themen 3
C StyledDocument: SimpleAttributeSets löschen? Allgemeine Java-Themen 2
P löschen Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben