Das ist so quasi die zweite Phase aus meinem anderen Thread:
http://www.java-forum.org/de/viewtopic.php?t=15729
Jetzt habe ich eine Klasse geschreiben, der man Am Anfang den Namen der zu verschlüsselnden Datei gibt.
Anschließend wird er eingelesen, "verschlüsselt" und wieder in eine neue Datei geschrieben (welche dann "2"+dateiName ist).
Wenn ich diesen Vorgang dann wiederhole -> Also eigentlich wieder entschlüssele, kommt zwar eine Datei, aber die hat nicht den selben Inhalt! (Ich habe es probier mit einer winzigen PDF-Datei).
Wer sich meinen Quelltext mal antun will, ich würde mich echt freuen, wenn mir jemand meinen Fehler sagen könnte. Ich hab das Dok nämlich zusammengeschnippelt aus einigen Beiträgen im Forum und einigen alten Dokumenten die ich noch zu Hause hatte .....
Das wäre dieser Code also:
Danke schon mal!
Skipy
http://www.java-forum.org/de/viewtopic.php?t=15729
Jetzt habe ich eine Klasse geschreiben, der man Am Anfang den Namen der zu verschlüsselnden Datei gibt.
Anschließend wird er eingelesen, "verschlüsselt" und wieder in eine neue Datei geschrieben (welche dann "2"+dateiName ist).
Wenn ich diesen Vorgang dann wiederhole -> Also eigentlich wieder entschlüssele, kommt zwar eine Datei, aber die hat nicht den selben Inhalt! (Ich habe es probier mit einer winzigen PDF-Datei).
Wer sich meinen Quelltext mal antun will, ich würde mich echt freuen, wenn mir jemand meinen Fehler sagen könnte. Ich hab das Dok nämlich zusammengeschnippelt aus einigen Beiträgen im Forum und einigen alten Dokumenten die ich noch zu Hause hatte .....
Das wäre dieser Code also:
Code:
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
public class EncryptKonsoleAll {
public static void main(String[] args) {
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String eingabe = "";
System.out.println("Wie ist der Name der Datei?");
try{ eingabe = input.readLine();
}
catch(Exception exc){}
auslesen(eingabe);
}
/*Empfängt einen String, und verändert bei jedem Charekter den 2., 3. und 5. Bit von hinten gesehen.
* Den Veränderten String gibt die Methode wieder zurück!
* (Kann zum ver- und entschlüsseln benutzt werden, da der Vorgan immer der gleiche
* */
private static String toPassword(String klartext){
StringBuffer crypttext = new StringBuffer();
char newchar;
int pointer=0;
while(pointer < klartext.length()) {
newchar = (char) ((klartext.charAt(pointer) >> 1)%2 == 0 ? klartext.charAt(pointer)+2 : klartext.charAt(pointer)-2);
newchar = (char) ((klartext.charAt(pointer) >> 2)%2 == 0 ? klartext.charAt(pointer)+4 : klartext.charAt(pointer)-4);
newchar = (char) ((klartext.charAt(pointer) >> 4)%2 == 0 ? klartext.charAt(pointer)+16 : klartext.charAt(pointer)-16);
crypttext.append(newchar);
pointer++;
}
return crypttext.toString();
}
/*List den Text aus der Datei "dateiName"
* Ruft die Methode zum verschlüsseln auf und gibt die verschlüsselten Daten gleich weiter
* an die Ausgabe in einem neuen Dokument welches eine 2 vor dem ursprünglichen Namen hat.
* */
public static void auslesen(String dateiName){
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String einlesen = "";
String auslesen = "";
String[] orginalDatei;
orginalDatei = new String[1000];
try{
writeFileSameLine("", "2"+dateiName, false);
FileReader datei = new FileReader(dateiName);
BufferedReader br = new BufferedReader(datei);
do{ auslesen = br.readLine();
if (auslesen != null){
writeFileNewLine(toPassword(auslesen), "2"+dateiName, true);
//Nur zu Kontrollzwecken
/* System.out.print(auslesen);
System.out.print("\t");
System.out.println(toPassword(auslesen));
*/}
}
while(auslesen != null);
}
catch(Exception exc){
System.out.println(exc);
System.out.println("Fehler in ArrayAuslesen() aus Einloggen");
}
}
//Ausgabe von text in die Datei filename, wenn append true, wird der Text an das Dokument hinten angehängt.
//Diese Ausgabe erstellt am Ende immer eine neue Zeile
public static boolean writeFileNewLine (String text, String filename, boolean append) {
try {
PrintStream openFile = new PrintStream( new FileOutputStream(filename, append));
openFile.print(text+"\n");
openFile.flush();
openFile.close();
return true;
}
catch(IOException ioe) {
ioe.printStackTrace();
return false;
}
catch(IndexOutOfBoundsException ibe) {
ibe.printStackTrace();
return false;
}
}
//Ausgabe von text in die Datei filename, wenn append true, wird der Text an das Dokument hinten angehängt.
//Diese Ausgabe erstellt am Ende keine neue Zeile!!!
public static boolean writeFileSameLine (String text, String filename, boolean append) {
try {
PrintStream openFile = new PrintStream( new FileOutputStream(filename, append));
openFile.print(text);
openFile.flush();
openFile.close();
return true;
}
catch(IOException ioe) {
ioe.printStackTrace();
return false;
}
catch(IndexOutOfBoundsException ibe) {
ibe.printStackTrace();
return false;
}
}
}
Danke schon mal!
Skipy