In eine Datei schreiben

  • Themenstarter Themenstarter Baran
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
B

Baran

Gast
Hallo Leute, ich habe folgende Aufgabe:
Ich soll ein Programm schreiben, mit dem ich in beliebige Dateien (Bilder, Textdokumente, usw.) schreiben kann. Das heisst Bytes verändern. So was nennt man doch Steganografie oder? Ein Einsatzgebiet wäre z.B. Verschlüsselung. Ich hab bis jetzt folgendes geschrieben. Jedoch Überschreibt er die Datei nicht, sondern löscht den bisherigen Inhalt. Ich hoffe Ihr könnt mir helfen!
Danke im voraus!
Baran
Code:
import java.lang.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.io.FileWriter;

public class Test2
{
	public static void main (String [] args)
	{
		new UserFrame();
	}
}
	class UserFrame extends Frame implements ActionListener
	{
		private File dateien;
		private TextField tf,tf1;
		Button btn,btn1,ds;
		private Label status,txt;
		private String dateiname,text;
		private FileWriter f1;
		private void place(Component comp, int x, int y, int width, int height)
			{
				comp.setBounds(x,y,width,height);
				add(comp);
			}

		public UserFrame()
		{
			setTitle("Codieren");
			setSize(300,200);
			setLayout(null);
			setResizable(false);
			setBackground(Color.lightGray);
			setLocation(300,200);

		place(status = new Label("Datei laden"),20,30,110,20);
		place(tf=new TextField(),20,50,150,20);

		place(txt=new Label("Bitte Text eingeben:"),20,95,200,20);
		place(tf1=new TextField(),20,115,150,20);

		place(btn = new Button("Abbrechen"),120,170,100,20);
	    btn.setFont(new Font("Arial",Font.BOLD,11));
	    btn.setBackground(new Color(200,200,200));
	    btn.addActionListener(this);
		place(btn1 = new Button("Ok"),60,170,50,20);
	    btn1.setFont(new Font("Arial",Font.BOLD,11));
	    btn1.setBackground(new Color(200,200,200));
	    btn1.addActionListener(this);
	    place(ds=new Button("Durchsuchen"),182,50,100,20);
	    ds.setFont(new Font("Arial",Font.BOLD,11));
	    ds.setBackground(new Color(200,200,200));
	    ds.addActionListener(this);

		setVisible(true);

		addWindowListener(new WindowAdapter()
				{
					public void windowClosing(WindowEvent e)
					{
						System.exit(0);
					}
		});
	}

	public void addActionListener(ActionListener l)
	{

	}

	public void actionPerformed(ActionEvent e)
	{
		String cmd = e.getActionCommand();
		System.out.println(cmd);
		if(cmd.equals("Abbrechen"))
			System.exit(0);
		if(cmd.equals("Ok"))
			Text2();
		if(cmd.equals("Ok"))
			Text1();
		if(cmd.equals("Durchsuchen"))
			bildLaden();
	}

	public void bildLaden()
	{
			FileDialog f = new FileDialog(this,"Bilddatei laden...",FileDialog.LOAD);

			f.show();
			dateiname = f.getDirectory();
			dateiname += f.getFile();
			tf.setText(dateiname);
			System.out.println(dateiname);
			// Falls der Benutzer keine Datei ausgewählt hat, wird null zurückgegeben
			// dann nichts weiter tun
			if(dateiname == null)

			return;
	}




	void Text1()
	{
			tf1.setText(tf1.getText());
			tf.setText(dateiname);
	}

	void Text2()
	{
		String text=tf1.getText();
		FileWriter f1;

		try
		{
	      f1 = new FileWriter(dateiname);
	      f1.write(text);
	      f1.close();

	    }
	   catch (IOException e)
	   {
	         System.out.println("Fehler beim Erstellen der Datei");
    	}
	}
}
 
prob das mal

f1 = new FileWriter(dateiname,true);

und dann zurückhüpfen usw, weil ein FileWriter wenn append = false er die Datei überschreibt!
 
Baran hat gesagt.:
So was nennt man doch Steganografie oder?
Das schreiben in eine beliebige Datei ist nicht ganz Steganografie....
Das Wort "Steganographie" kommt aus dem Griechischen und heißt übersetzt "verborgenes Schreiben". Sie wird oft definiert als "die Kunst und Wissenschaft der Kommunikation auf einem Weg, welcher die Existenz der Nachricht verbirgt". Somit ist Sinn und Zweck die "Vertuschung" von Informationen. Die Sicherheit einer geheimen stenographischen Botschaft liegt also darin, dass dem Angreifer die Existenz einer solchen nicht auffällt.
Viele Menschen ordnen die Steganographie als Unterpunkt zur Kryptographie ein. Das ist falsch, da beide Wissenschaften vollkommen verschiedene Ansätze haben, eine Nachricht dem Empfänger sicher zuzukommen lassen. Im Gegensatz zur Kryptografie, bei der eine Botschaft verschlüsselt wird, versucht die Steganografie eine Botschaft dadurch vor dem Zugang Unbefugter zu schützen, dass für den nicht eingeweihten Betrachter nicht erkennbar ist, dass eine versteckte Botschaft überhaupt vorhanden ist.
 
@thE 29:

Super, vielen Dank! Von diesem 'append' hatte ich schon gehört, hatte aber keine Ahnung wo das reinkommt. Vielleicht kannst Du mir ja noch weiterhelfen: Wie kann ich den String den ich eingebe verschlüsseln? Also dass er z.B. alle 5 Zeichen einen Buchstaben reinschreibt und nicht alle hintereinander?

Baran
 
@deathbyaclown:

Danke für die Aufklärung! Wie man sieht -> man lernt nie aus
 
Baran hat gesagt.:
@deathbyaclown:
Danke für die Aufklärung! Wie man sieht -> man lernt nie aus
Kein Problem - mehr Infos gibts auch in der Folge 116 "Codename Cobra" von "Die Drei Fragezeichen" 😀
 
naja, ich würde einfach normalreinschreiben

entweder mit filewriter oder halt mit randomaccessfile (zeichenweise reinschreiben, mit write(zeichen)) und wenn du halt einen counter mitlaufen lässt mit if(counter%5 == 0) schreibe Zeichen

wäre glaube ich das einfachste
 
ich komm damit jetzt leider nicht ganz zurecht. könnt ihr mir ein codebeispiel geben, den ich ungefähr so mit einbauen könnte? also das programm soll von den eingegebenen string über die datei verteilen. und zwar nach jedem fünften zeichen der datei einen buchstaben aus dem string reinsetzen. später muss ich eben noch ein programm schreiben das dieses genau andersrum macht und jedes fünfte zeichen liest. wäre echt super wenn ihr mir da weiterhelfen könntet.
vielen dank im voraus
baran
 
da hast bisi code 😉

Code:
    try{
      RandomAccessFile file = new RandomAccessFile("C:\\SQL.LOG", "rw");
      String strLine = "";
      ArrayList ar = new ArrayList();
      String strText = "HALLO SCHATZI!";
      while ( ( strLine = file.readLine() ) != null)
      {
        ar.add(strLine);
      }
      StringBuffer strBuf = new StringBuffer("");
      for(int x = 0; x != ar.size(); x++)
        strBuf.append(ar.get(x));
      file.seek(0); //oder 1, was halt am anfang hinspringt
      for(int x = 0,y=0;  x != strBuf.length(); x++)
      {
        file.write(strBuf.charAt(x));
        if(x % 5 == 0 && y != strText.length()) //0 % 5 = 0, also kannst noch abfragen && x != 0, das er nicht als 2tes Zeichen reinschreibt
        {
          file.write(strText.charAt(y)); //geht dann im String weiter
          y++;
        }
      }
    }
    catch(Exception ex)
    {
      ex.printStackTrace();
    }

denn stringbuffer hab ich deswegen verwendet, da ein string bei += eigentlich auch das append von dem verwendet!
ansonsten müsste es glaub ich gehen!
beim auslesen gleich reinschreiben geht glaube ich nicht, weil er die position net zurückrückt!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben