import java.io.*;
public class KryptoAnalyseHabo
{//class KryptoAnalyseHabo
private static void vigChiffre(String kryptText)throws IOException
{//vigChiffre()
int textLaenge, schluesselLaenge;
String schluessel, auswahl;
char[] textVig;
BufferedReader ein=new BufferedReader(new InputStreamReader(System.in));
System.out.println("*** Vigenére Chiffre ***");
System.out.println("\nBitte geben sie ein Wort als Schlüssel ein:");
schluessel=ein.readLine();
textLaenge=kryptText.length();
schluesselLaenge=schluessel.length();
textVig=new char[textLaenge];
for(int i=0, j=0; i<textLaenge; i++, j++)
{
if(j==schluesselLaenge)j=0;
textVig[i]=(char)(kryptText.charAt(i)-schluessel.charAt(j));
}
kryptText="0";
for(int i=0; i<textLaenge; i++)
{
kryptText=kryptText+Character.toString(textVig[i]);
}
kryptText=kryptText.substring(1);
System.out.println("Der Text wurde mit "+schluessel+" als Schluessel dechiffriert:");
System.out.println(kryptText);
System.out.println("\n(T)ext bearbeiten, Text (s)peichern, (B)eenden?");
auswahl=ein.readLine();
if(auswahl.equals("T")||auswahl.equals("t"))
{
bearbeiten(kryptText);
}
else if(auswahl.equals("S")||auswahl.equals("s"))
{
dateiSpeichern(kryptText);
}
else if(auswahl.equals("B")||auswahl.equals("b"))
{
System.out.println("\nProgramm beendet...");
System.exit(0);
}
else
{
System.out.println("Ungültige Eingabe!");
vigChiffre(kryptText);
}
}//vigChiffre()
private static void caesar(String kryptText)throws IOException
{//caesar()
int schluessel, laenge;
char[] textVerschoben;
String auswahl;
BufferedReader ein=new BufferedReader(new InputStreamReader(System.in));
System.out.println("*** Caesar Code ***");
System.out.println("\nBitte geben sie eine Zahl als Schlüssel ein:");
schluessel=Integer.parseInt(ein.readLine());
laenge=kryptText.length();
textVerschoben=kryptText.toCharArray();
for(int i=0; i<laenge; i++)
{
textVerschoben[i]=(char)(textVerschoben[i]-schluessel);
}
kryptText="0";
for(int i=0; i<laenge; i++)
{
kryptText=kryptText+Character.toString(textVerschoben[i]);
}
kryptText=kryptText.substring(1);
System.out.println("Text wurde mit "+schluessel+" als Schlüsselwert dechiffriert:");
System.out.println(kryptText);
System.out.println("\n(T)ext bearbeiten, Text (s)peichern, (B)eenden?");
auswahl=ein.readLine();
if(auswahl.equals("T")||auswahl.equals("t"))
{
bearbeiten(kryptText);
}
else if(auswahl.equals("S")||auswahl.equals("s"))
{
dateiSpeichern(kryptText);
}
else if(auswahl.equals("B")||auswahl.equals("b"))
{
System.out.println("\nProgramm beendet...");
System.exit(0);
}
else
{
System.out.println("Ungültige Eingabe!");
caesar(kryptText);
}
}//caesar()
private static void dechiffrierenMenue(String kryptText)throws IOException
{//dechiffrierenMenue()
String auswahl;
BufferedReader ein=new BufferedReader(new InputStreamReader(System.in));
System.out.println("**** Text dechiffrieren ***");
System.out.println("\n1 - Caesar Code");
System.out.println("2 - Vigenére Chiffre");
System.out.println("Welchen Algorithmus wollen sie auf den Text anwenden?");
auswahl=ein.readLine();
if(auswahl.equals("1"))
{
caesar(kryptText);
}
else if(auswahl.equals("2"))
{
vigChiffre(kryptText);
}
else
{
System.out.println("Ungültige Eingabe!");
dechiffrierenMenue(kryptText);
}
}//dechiffrierenMenue()
private static void bearbeiten(String kryptText)throws IOException
{//bearbeiten()
String auswahl, datei;
char muster, neu;
BufferedReader ein=new BufferedReader(new InputStreamReader(System.in));
System.out.println("*** Text bearbeiten ***");
System.out.println(kryptText);
System.out.println("\n(S)uchen & ersetzen, (D)echiffrieren, (T)ext speichern, (B)eenden");
auswahl=ein.readLine();
if(auswahl.equals("S")||auswahl.equals("s"))
{
System.out.println("Welches Zeichen möchten sie ersetzen?");
muster=ein.readLine().charAt(0);
System.out.println("Durch welches Zeichen wollen sie "+muster+" ersetzen?");
neu=ein.readLine().charAt(0);
kryptText=kryptText.replace(muster, neu);
//System.out.println(kryptText);
bearbeiten(kryptText);
}
else if(auswahl.equals("D")||auswahl.equals("d"))
{
dechiffrierenMenue(kryptText);
}
else if(auswahl.equals("T")||auswahl.equals("t"))
{
dateiSpeichern(kryptText);
}
else if(auswahl.equals("B")||auswahl.equals("b"))
{
System.out.println("\nProgramm beendet...");
System.exit(0);
}
else
{
System.out.println("\nUngültige Eingabe!");
bearbeiten(kryptText);
}
}//bearbeiten()
private static void analysiere(String kryptText)throws IOException
{//analysiere()
int zeichenGesamt;
char[]kryptChar;
int[]counter;
boolean[]doppelt;
String auswahl;
BufferedReader ein=new BufferedReader(new InputStreamReader(System.in));
zeichenGesamt=kryptText.length();
counter=new int[zeichenGesamt];
doppelt=new boolean[zeichenGesamt];
kryptChar=kryptText.toCharArray();
for(int i=0; i<zeichenGesamt; i++)
{
for(int j=0; j<zeichenGesamt; j++)
{
if(kryptChar[i]==kryptChar[j])
{
counter[i]++;
}
}
}
System.out.println("Text:\n"+kryptText);
System.out.println("Der Text besteht aus "+zeichenGesamt+" Zeichen");
System.out.println("Häufigkeitsanalyse:");
for(int i=0; i<zeichenGesamt; i++)
{
for(int j=i+1; j<zeichenGesamt; j++)
{
if(kryptChar[i]==kryptChar[j])
{
doppelt[j]=true;
}
if(doppelt[i]!=true)
{
System.out.print(">"+kryptChar[i]+"< Anzahl: "+counter[i]+" ");
for(int k=0; k<counter[i]; k++)
{
System.out.print("*");
}
System.out.print("\n");
doppelt[i]=true;
}
}
}
System.out.println("(T)ext bearbeiten, Text (s)peichern oder (B)eenden?");
System.out.println("Ihre Wahl?");
auswahl=ein.readLine();
if(auswahl.equals("T")||auswahl.equals("t"))
{
bearbeiten(kryptText);
}
else if(auswahl.equals("S")||auswahl.equals("s"))
{
dateiSpeichern(kryptText);
}
else if(auswahl.equals("B")||auswahl.equals("b"))
{
System.out.println("Programm beendet...");
System.exit(0);
}
else
{
System.out.println("\nUngültige Eingabe!");
analysiere(kryptText);
}
}//analysiere()
private static void dateiSpeichern(String kryptText)throws IOException
{
int textLaenge=kryptText.length();
char[] dateiInhalt=new char[textLaenge+1];
String datei;
BufferedReader ein=new BufferedReader(new InputStreamReader(System.in));
System.out.println("*** Text speichern ***");
System.out.println("\nUnter welchem Namen wollen sie den Text speichern?");
datei=ein.readLine();
BufferedWriter dateiSchreiber=new BufferedWriter(new FileWriter(datei+".txt"));
for(int i=0; i<textLaenge; i++)
{
dateiInhalt[i]=kryptText.charAt(i);
dateiSchreiber.write(dateiInhalt[i]);
}
dateiSchreiber.close();
menue();
}
private static void dateiLaden()throws IOException
{//dateiLaden()
String dateiInhalt="0", datei, zeile, kryptText;
BufferedReader ein=new BufferedReader(new InputStreamReader(System.in));
System.out.println("*** Datei laden ***");
System.out.println("\nWelche Datei soll geladen werden?");
datei=ein.readLine();
try
{
BufferedReader dateiLeser=new BufferedReader(new FileReader(datei+".txt"));
while((zeile=dateiLeser.readLine())!=null)
{
dateiInhalt=dateiInhalt+zeile+"\n";
}
kryptText=dateiInhalt.substring(1, dateiInhalt.length()-1);
analysiere(kryptText);
}
catch(java.io.FileNotFoundException e)
{
System.out.println("Datei >"+datei+"< konnte nicht gefunden werden...");
System.out.println("Bitte überprüfen sie die Schreibweise und stellen Sie");
System.out.println("sicher, dass sich die Datei im Ordner >KryptoAnalyseHabo< befindet!\n");
menue();
}
}//dateiLaden()
private static void menue()throws IOException
{//menue()
String auswahl, datei;
BufferedReader ein=new BufferedReader(new InputStreamReader(System.in));
System.out.println("*** KryptoAnalyzer (Habo) ***");
System.out.println("1 - Datei laden");
System.out.println("2 - Programm beenden");
System.out.println("Ihre Wahl?");
auswahl=ein.readLine();
if(auswahl.equals("1"))
{
dateiLaden();
}
else if(auswahl.equals("2"))
{
System.out.println("Programm beendet...");
System.exit(0);
}
else
{
System.out.println("Ungültige Eingabe!");
menue();
}
}//menue()
public static void main(String[]args)throws IOException
{//main()
menue();
}//main()
}//class KryptoAnalyseHabo