jo, ich lern grad Java.
Fileschreder sin ja ne schöne Sache, ne aber ich hab gehört man kann sogar Dinge wiederherstellen, die ein Schredder gelöscht hat. Das einzige mittel dagegen wäre, das ganze dann noch ein paar mal zu überschreiben. Daher wollte ich mir mit Java einen eigenen Schredder basteln, der die Bytes (Bits gibts ja in Java nich) herausfindet und diese 5-6mal zufällig ändert. GUI sieht schon gut aus, nur ich hab keine ahnung, wie ich an die Stellen der Bytes auf der Festplatte kommen soll, um die dann zu überschreiben.
Weiss jemand wie das geht?
Bits bzw. Bytes einer Datei heruasfiden
-
-
wüsste nicht, dass sowas überhaupt geht, denn du brauchst ja ein object (ressource, stream, etc)
du müsstest also als ausgangsobjekt mindestens ne file haben.
könntest ja mal testen nen bild zu nehmen, diese file als stream zu laden und dann den stream nach ablauf von xx bytes zu zerhacken oder wat weiß ich -
Naja, eig. weiss ich nur, wie ich Dateien einlesen kann, aber nich wie ich Bits/Bytes auf der Festplatte ändern kann.
Ich schau mal in der API, was ein Filestream denn im genauen kann. -
mal fürs verständnis...
hast du ne datei, die du schreddern willst oder hast du schredderschnipsel auf der hdd und willst die entschreddern?
oder nochma schreddern oder wie?beschreib mal bitte was du vorhast und zwar so, dass ich kacknoob des auch kapier
-
So weit ich weiss, geht ein schredder her und setzt alle Bits, die etwas mit der Datei zu tun haben auf 0 oder 1.
Wenn ich jetzt ein ASCII Textdocument habe, indem steht hallo, dann ist auf der festplatte (abzüglich registry-eintrag und bla) z.B. 00000001 für a, 00010010 für l (stimmt jetzt sicher nich, is jetzt aber mal egal).
Dann setzt der Schredder das
00000001 zu 00000000 und
00010010 zu 00000000
Aber anscheinend kann man das wiederherstellen, ausser man überschreibt das mehrfach, also z.B.
00000001 zu 00000000,
00010010 zu 00000000
00000000 zu 11111111,
00000000 zu 11111111,
11111111 zu 00000000 un zu guter letzt
11111111 zu 00000000
Dann würde es nicht nicht vollständig oder garnicht wiederherstellbar sein.
Aber ich kann ja nich wahllos auf der Festplatte rummachen. Sondern die Bits des Registry eintrags und die Bits der Dateifragmente (falls vorhanden) 2-3 mal überschreiben, sodass von der Datei NIX mehr da ist.Ich benutz ja keinen Schredder, damits hinterher immernoch da is.
-
also is dein ausgangspunkt dass du ne datei hast und die willste zerpflücken.. oder?
denn dann kannst du die file als stream laden und bitshiften und sonstwas damit anstellen und dir eigene fragmentgössen in bytearrays schreiben, die du dann auch wieder verwursten kannst.also so zumindest die theorie
-
Jap. Der benutzer gibt ne datei an und deren bytes zerruof und überschreib ich dann.
In der API steht zu FileOutputStream() die Methode write(byte[] b).
Sie schreibt alle bytes in b in den FileOutput.
Damit wärs doch getan, oder? -
jup, denke doch... du nimmst nen input-stream, verwurstest den mehrfach und schreibst über den outputstream eine datei die du dann getrost löschen kannst
vergiss des flush nich -
Joa, ich dachte eher ich öffne das über FileInputStream(), wirft ja ne FileNotFound Exception, nehme dann die bytegröße mit new File("kasj").length(); mach dann das bytearray und fülle des mit lauter 0en.
Stimmt der ansatz oder her wie dus gemient hast? -
jup so ungefähr probier halt mal dem ganzen problem auf die weise entgegenzutreten
-
Also zerlegen tut er sie, hat hinterher (laut windoof) auch 0KB aber sie ist noch sichtbar, file.delete(); scheint nicht zu funktionieren. Hier mal der ganze Source(GUI noch nicht fertig):
Java
Alles anzeigen/** * @(#)FileWiper.java * * * @author * @version 1.00 2010/2/27 */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; public class FileWiper { JFrame frame; JButton gobt; JTextField feld; public static void main(String[] args) { FileWiper wiper=new FileWiper(); wiper.go(); } public void go() { frame=new JFrame("Schredder"); frame.setSize(300,200); frame.setLayout(new FlowLayout()); gobt=new JButton("schreddern"); feld=new JTextField(" "); frame.add(feld); frame.add(gobt); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); gobt.addActionListener(new GoBTpressed()); } class GoBTpressed implements ActionListener { public void actionPerformed(ActionEvent e) { try { new FileInputStream(feld.getText()); FileOutputStream stream=new FileOutputStream(feld.getText()); File file=new File(feld.getText()); long size1=file.length(); int size2=(int) size1; byte[] bs1=new byte[size2]; byte[] bs2=new byte[size2]; int i=0; while (i<size2) { bs1[i]=0; bs2[i]=1; i++; } try { stream.write(bs2); stream.write(bs1); stream.write(bs2); stream.write(bs1); stream.close(); if(file.exists()){ file.delete(); } System.out.println("Fertig"); } catch (IOException exc) { System.out.println(exc); } } catch(FileNotFoundException ex) { System.out.println(ex); } } } }
-
-
EDIT:
Aso, ja dann. Ich probiers nochmal
EDIT2:
ne, ich schau nochmal wegen delete();
/EDIT
Weiss du, obs ne klasse gibt, mit der man so n Öffnen-Fenster machen kann?(Gibts ja überall, dieses Öffnen fenster mti dem Dateiauswahlkram) -
such mal nach dem JFileChooser
edit:
CodeJFileChooser myfileChooser= new JFileChooser(); myfileChooser.setCurrentDirectory(new java.io.File(".")); myfileChooser.showOpenDialog(null); myfileChooser.setDialogTitle("Datei auswählen");
damit gehste ins aktuelle verzeichnis von wo aus der chooser aufgerufen wird
-
Cool, danke. Damit gehts. Fehlt nurnoch, dass die Datei dann mal gelöscht wird, ich find den fehler nicht.
EDIT:
Und ich kann JARs baun, wie ich will, meine Runtime macht die Krätsche, JCreator nich..... Und ich dachte PHP sei schwer xDD -
womit haste des geprogged? eclipse? netbeans?
schick ma des projekt als zipfile, dann guck ich ma woran des liegt.. das mitm flush() haste gemacht? -
Mit JCreator. Ich hab das mit flush() und deleteOnExit(); probiert, hat aber beides net gefruchtet.
FileWiper.zip -
aaalso bei mir gehts nach kleinen änderungen
vergleiche mal meinen code mit deinemCode
Alles anzeigentry { //new FileInputStream(thefile); FileOutputStream stream=new FileOutputStream(thefile); File file=new File(thefile); long size1=file.length(); int size2=(int) size1; byte[] bs1=new byte[size2]; byte[] bs2=new byte[size2]; int i=0; while (i<size2) { bs1[i]=0; bs2[i]=1; i++; } try { stream.write(bs2); stream.write(bs1); stream.write(bs2); stream.write(bs1); stream.flush(); stream.close(); if(file.exists()){ if (file.isFile()) { boolean deleted = file.delete(); if (!deleted) { output.setText("Datei geschreddert, nicht gelöscht"); } else { output.setText("Fertig"); } } }
ok ich machs direinfacher.. des flush gehört nich zur file, sondern zum stream (hier den outputstream)
des mit dem inputStream hab ich mal auskommentiert, denn ein objekt ohne referenz is humbug, wenn du es nicht anonym verwendest.dann konnte ja kein ergebnis kommen, weil du zwei mal file.delete() auf des gleiche file-objekt auszuführen.. wenn die file beim ersten mal gelöscht würde, wäre des zweite (in der if-bedingung) fürn arsch und würd eher ne exception werfen, als true zu werden^^
im anhang hab ich dir des ganze mal zu ner jar compiled und gezipped.
das ganze ding is auch übelst langsam, kann gar nich verstehen wieso des so is... ich hab hier win7 x64 enterprise laufen und hab 4GB ram und ich hab gedacht wenn einer jetzt was schlechteres hat muss des ja jahre dauern...
wieso arbeitest du so viel mit inner classes?
du könntest bei nem button ganz einfach dem button-objekt ne action performed geben..nimm dir mal netbeans oder eclipse zum developing von javazeugs..
netbeans hat nen prima visual editor und eclipse is einfach geiler beim debuggen -
Nö, also meine Versionen haben 91 mb in 2 Sekunden geschreddert, ging flux.
Wie kann ich dem Button ubjekt nen action performed gegen? Ne eigene Klasse extends?Lässt sich die JAR bei dir ausführen? Bei mir nicht....
Ich Probier NetBeans mal aus.
Ich hab halt mit JCreator angefangen, weil Kolegen meines Vaters, die auch schon Java Developed haben den wohl mega gelobt haben.
Des unreferenziert FileOutPutStream hatte ich drin, weil FileOutputStream keine Exception wirft, wenn die Datei nich gefunden wurde.
Und dann kann ich auch keine Datei nicht gefunden meldung anzeigen -
welche java-version haste installiert? und ja bei mir gehts hab jdk1.6.0_16 installiert
und ich meine allgemein langsam beim öffnen des fensters, öffnen des filechoosers, des löschen selber ging fix.. jozum glück hab ich den entsprechenden code hier nochma kopiert, so dass du des ja selber hinbekommen solltest
oder lad einfach den gezippten anhang in meinem vorigen posting runter -