# Facharbeit



## TeKo (12. Dez 2008)

Nabend,
Also ich muss ne Facharbeit schreiben.
Ich wollte ein Programm schreiben, mit dem man Daten verschlüsseln kann, also nicht nur Text, sondern .Rar Datein oder sonstwas.

Jetzt suche ich einen Verschlüsselungs Algo, mit dem man sowas am besten machen kann.
Er sollte nicht alzu umständlich sein, da ich den selber Implementieren wollte und nicht nur einfach nen Code ausem Netz ziehen, aber halt nicht einfach ne Caesar Verschiebung 
Dazu müsste er ja auch einigermaßen schnell zu ver- und entschlüsseln sein, falls man mal etwas größere Datein hat und von der Sicherheit her ist es nicht so schlimm, wenn die NSA es schaffen würde den zu knacken :roll:
Am besten ne genaue Beschreibung dazu.

Wäre super, wenn da jemand was hätte, Tipps fürs verschlüsseln von ganzen Datein, nehme ich auch gerne, falls jemand nen gutes Tut hat, dann muss ich nicht so lange googlen.


----------



## 0x7F800000 (12. Dez 2008)

Was gibt's da lange zu googeln... Erster treffer bei "encryption" liefert schon AES. :roll:
Aber das wäre einfach nur abschreiberei des Algorithmus, da kann man glaub ich nicht so viel neues selbst dazuerfinden, das sinnvoll zu analysieren dürfte etwas schwer werden. Bei einer Facharbeit musst du ja irgendwie 12 Seiten über irgendwas schreiben, kannst da doch nicht einfach den code oder den wikipedia artikel ausdrucken...


----------



## TeKo (12. Dez 2008)

Darum meinte ich ja, dass ich am besten ne genaue Beschreibung des Algos suche, damit man da halt noch was selber machen kann, das wird natürlich nicht der einzige Teil sein, dazu kommt dann noch ne GUI und eine Ausarbeitung usw.

Welcher von den ganzen DES, AES, Twofish usw ist denn wohl noch am einfachsten zu implementieren, ohne ctrl+c?


----------



## mahe (12. Dez 2008)

Lustig wäre eine Verschlüsselung per OneTimePad mit automatischer zufälliger Schlüsselgenerierung.

Da ist die Verschlüsselung selbst ausgesprochen einfach (z.B. XOR), Du könntest Dich aber bei der Zufallsfunktion spielen.
Z.B. ein Programm welches im Hintergrund bestimmte Ereignisse aufzeichnet und so einen Entriopie-Pool füllt.

Damit hättest Du das eigentlich einfachste und absolut sicherste Verschlüsselungsverfahren implementiert.
In der Dokumentation könntest Du Dich dann über Schlüsselverteilung auslassen um fehlende Seiten zu füllen :wink:


----------



## 0x7F800000 (13. Dez 2008)

TeKo hat gesagt.:
			
		

> Darum meinte ich ja, dass ich am besten ne genaue Beschreibung des Algos suche, damit man da halt noch was selber machen kann


Wenn du's noch genauer kriegst, was bleibt denn dann für dich überhaupt noch übrig^^ Ansonsten bei solchen relativ komplexen und nicht allzu neuen Sachen einfach mal zur Bibliothek gehen, buch ausleihen, in der ruhe abends durchblättern... Ewiges herumgoogln nervt meistens nur, wenn es etwas komplizierter wird.


> dazu kommt dann noch ne GUI und eine Ausarbeitung usw.


Muss das sein? Ein gutes shell programm ist hundert mal angenehmer als eine beschissene gui^^


----------



## TeKo (13. Dez 2008)

> Muss das sein? Ein gutes shell programm ist hundert mal angenehmer als eine beschissene gui^^


Damit hat man dann aber 2 Themen, ausem Unterricht mit eingebunden


----------



## 0x7F800000 (13. Dez 2008)

TeKo hat gesagt.:
			
		

> Damit hat man dann aber 2 Themen, ausem Unterricht mit eingebunden


Achso, ja, richtig, es geht ja um irgendsoeine Bildungseinrichtung (etwa Schule) da kriegt man doch sonst auch nur die herstellung von beschissenen gui's beigebracht. Also wird es dem Lehrer wohl gar nicht erst auffallen, dass die gui beschissen ist, weil er das selber nicht anders kennt 

Ah gut, dann viel glück :toll:


----------



## TeKo (13. Dez 2008)

Ja so ungefähr 

Ich habe bis jetzt sowas nur mit Strings oder Chars gemacht, aber noch nicht mit ganzen Datein, da muss ich das wohl über Bytes machen richtig?


```
public static void encryptFile(String originalFile, String encryptedFile, String password) throws Exception {
      CipherOutputStream out;
      InputStream in;
      Cipher cipher;
      SecretKey key;
      byte[] byteBuffer;      
      cipher = Cipher.getInstance("DES");
      key = new SecretKeySpec(password.getBytes(), "DES");
      cipher.init(Cipher.ENCRYPT_MODE, key);
      in = new FileInputStream(originalFile);
      out = new CipherOutputStream(new FileOutputStream(encryptedFile), cipher);
      byteBuffer = new byte[1024];
      for (int n;(n = in.read(byteBuffer)) != -1;out.write(byteBuffer, 0, n));
      in.close();
      out.close();
      //new File(originalFile).delete();
   }
```

Habe dazu das hier gefunden, funktioniert auch sowait, aber das hilf mit nicht wirklich weiter, da das meiste wohl von anderen Klassen übernommen wird.

Verstehe das hier z.B. nicht wirklich:

```
byteBuffer = new byte[1024];
      for (int n;(n = in.read(byteBuffer)) != -1;out.write(byteBuffer, 0, n));
```

Probiere mich atm an TEA bzw XTEA, auch wenn das wohl nicht der Sicherste Algo ist, aber aufjedenfall ist er erstmal leichter zu implementieren als AES.
Was ich bis jetzt habe, möchte ne Datei als byte[], wie Kriege ich ne beliebige Datei in nen byte Array?


----------



## mahe (13. Dez 2008)

Wie wärs mit byteweisem Einlesen?


----------



## 0x7F800000 (14. Dez 2008)

TeKo hat gesagt.:
			
		

> wie Kriege ich ne beliebige Datei in nen byte Array?


geht gar nicht. Passt unter umständen schlicht und einfach nicht in den flüchtigen Speicher. Eben deswegen wird es ja in kleinen stücken eingelesen, so wie hier:

```
byteBuffer = new byte[1024];
for (int n;(n = in.read(byteBuffer)) != -1;out.write(byteBuffer, 0, n));
```
was gibts denn hier zu verstehen? solang was da ist, wirds in das byte-array eingelesen, und verschlüsselt wieder in den ausgabestrom geschrieben...

Aber mit der eingebauten Cypher klasse solltest du das natürlich nicht machen, um die zu verwenden, braucht man keine facharbeit drüber zu screiben, sondern lediglich "Cypher" in der API raussuchen und die zwei zeilen in den code reinkopieren...


----------



## TeKo (14. Dez 2008)

Das ist mir klar, mit den Cipher Klassen hat das ganze Programm nur 10 Zeilen 

Also nehme ich 1024 bytes, verschlüssel die und schreibe sie wieder, dann die nächsten 1024 usw.

Ja gut, halt so viele wie ich reinkriege.


----------



## 0x7F800000 (14. Dez 2008)

darfst auch 1023, oder auch 3739 nehmen, wenn's dir besser gefällt^^


----------

