Hallo,
ich habe eine Uni-Aufgabe zu lösen in der man einen 18 MB großen Text mittels Vigener Verfahren verschlüsseln soll. Gegben sind 2 Dateien: codes.txt und der cleartext.big.txt (die 18mb datei).
Nun soll man die codes einlesen, was ich auch in der methode getCodes() mache. Die codes.txt sieht so aus:
mein programm soll nun mithilfe dieser codes und dem vorgegebenen Schlüssel ("AI4 encrypts every+hing? Y3s: i7 d()3s!!") den Text verschlüsseln. Das ganze funktioniert auch einwandfrei, allerdings viiiiel zu langsam. Ich denke es liegt an meinem Vorgehen, dass ich die codes in ein array einlese und dieses array für jedes zeichen im text durchsuchen muss, um an den entsprechenden code zu kommen.
Hier mein Programm:
Ich brauche ca 13 Sekunden um die Datei zu verschlüsseln... leider wird in der Aufgabe verlangt, es in max. 5 sec zu tun. also denke ich, dass da noch einiges an optimierungspotenzial vorhanden ist.
Vielen Dank schon einmal
ich habe eine Uni-Aufgabe zu lösen in der man einen 18 MB großen Text mittels Vigener Verfahren verschlüsseln soll. Gegben sind 2 Dateien: codes.txt und der cleartext.big.txt (die 18mb datei).
Nun soll man die codes einlesen, was ich auch in der methode getCodes() mache. Die codes.txt sieht so aus:
Code:
. 0
, 1
2
! 3
? 4
a 5
A 6
b 7
B 8
c 9
C 10
d 11
D 12
e 13
E 14
f 15
F 16
g 17
G 18
h 19
H 20
i 21
I 22
j 23
J 24
k 25
K 26
l 27
L 28
m 29
M 30
n 31
N 32
o 33
O 34
p 35
P 36
q 37
Q 38
r 39
R 40
s 41
S 42
t 43
T 44
u 45
U 46
v 47
V 48
w 49
W 50
x 51
X 52
y 53
Y 54
z 55
Z 56
0 57
1 58
2 59
3 60
4 61
5 62
6 63
7 64
8 65
9 66
: 67
; 68
" 69
- 70
_ 71
( 72
) 73
+ 74
mein programm soll nun mithilfe dieser codes und dem vorgegebenen Schlüssel ("AI4 encrypts every+hing? Y3s: i7 d()3s!!") den Text verschlüsseln. Das ganze funktioniert auch einwandfrei, allerdings viiiiel zu langsam. Ich denke es liegt an meinem Vorgehen, dass ich die codes in ein array einlese und dieses array für jedes zeichen im text durchsuchen muss, um an den entsprechenden code zu kommen.
Hier mein Programm:
Code:
import java.io.*;
import Prog1Tools.IOTools;
import java.text.*;
import java.util.*;
public class vigenere2 {
public static char[] getCodes() throws IOException {
String in = "codes.txt";
System.out.print("Datei " +in +" wird nun eingelesen...");
int j=0;
char[] codes = new char[75];
String ch;
StringBuffer lineBuff = new StringBuffer();
try {
File input = new File(in);
BufferedReader r = new BufferedReader (new FileReader(in));
while ( (ch = r.readLine())!= null) {
lineBuff.append(ch);
codes[j]=lineBuff.charAt(0);
j++;
lineBuff.setLength(0);
}
r.close();
//for (int i=0; i < codes.length; i++) {
//System.out.println("Index[" +i +"] = " +codes[i]); //Test ob Array richtige Werte enthält
//}
}
catch (IOException e) {
System.out.println(e);
};
System.out.println(" fertig!");
return codes;
}
public static int findCodes(char[] array , char target) {
for (int j = 0; j < array.length; j++) {
if ( array[j] == target )
return j; // Target gefunden.
}
return -1 ; // Target nicht gefunden.
}
public static void main (String[] args) throws IOException {
try {
Date start = new Date();
String key = new StringBuffer().append("AI4 encrypts every+hing? Y3s: i7 d()3s!!").toString();
char[] codeArray = getCodes();
File output = new File("output.txt");
BufferedWriter out = new BufferedWriter (new FileWriter(output));
String text = "cleartext.txt";
String ch;
try {
File input = new File(text);
BufferedReader r = new BufferedReader (new FileReader(text));
while ( (ch = r.readLine())!= null) {
for (int i = 0, j = 0; i < ch.length(); i++, j++){
//i ist der Zähler für den Originaltext
//j ist der Zähler für das Schlüsselwort
if( j == key.length()) j = 0;
//wenn Schlüsselwort durchlaufen, wieder von vorne im Schlüssel
int var1 = findCodes(codeArray, (char)(ch.charAt(i)));
int var2 = findCodes(codeArray, key.charAt(j));
if (var1 != -1 && var2 != -1) {
int ciph = (var1 + var2) % 26;
out.write(codeArray[ciph]);
}
else {
System.out.println("Vorgang abgebrochen!");
break;
}
//}
}
out.newLine();
}
out.close();
r.close();
}
catch (IOException e) {
System.out.println(e);
};
Date stopp = new Date();
long laufzeit = stopp.getTime() - start.getTime();
System.out.println("Gesamtlaufzeit: " +laufzeit + " ms");
}
catch (IOException e) {
System.out.println(e);
};
}
}
Ich brauche ca 13 Sekunden um die Datei zu verschlüsseln... leider wird in der Aufgabe verlangt, es in max. 5 sec zu tun. also denke ich, dass da noch einiges an optimierungspotenzial vorhanden ist.
Vielen Dank schon einmal