Caesar Verschlüsselung

Nummer11

Mitglied
Ich will ein Programm schreiben, dass eine verschlüsselte (halt mit Caesar) Datei automatisch entschlüsselt. Die Schlüsselzahl soll NICHT bekannt sein, das Programm soll also in der Lage sein den Schlüssel zu finden. Mein Ansatz: Die Anzahl der 'e's im Text zählen und so auf dem Schlüssel kommen.

Mein Problem: Wie kann ich die Anzahl der einzelnen Zeichen in der Datei zählen?

Java:
import java.io.*;
public class Decode {

    public static void main(String[] args){
       
        File quelle = new File("Quelle");
        File ziel = new File("Ziel");
        try{ quelle.createNewFile();
             ziel.createNewFile();
        } catch (IOException e){
            e.printStackTrace();
        }
        
//   
       
        try{
        FileReader lesen = new FileReader(quelle);
        FileWriter schreiben = new FileWriter(ziel);
       
        int geleseneChars=lesen.read();
       
        while(geleseneChars != -1){
//       
           
            geleseneChars=lesen.read();
        }
       
       
        }catch(Exception e){
       
        }
    }
   
   
}
 
Als Ansatz könntest du die einzelnen Buchstaben (als Key) in einer HashMap mit der jeweiligen Anzahl (als Value) speichern. Immer wenn du einen neuen Buchstaben findest fügst du ihn hinzu, ansonsten inkrementierst du den Value des Buchstaben.
 
Als Hilfe:
Java:
    Object[][] buchstabeAnzahl = {
        {'E', 16040, 16.11f},
        {'N', 10288, 10.33f},
        {'I', 9011, 9.05f},
        {'R', 6693, 6.72f},
        {'T', 6312, 6.34f},
        {'S', 6203, 6.23f},
        {'A', 5577, 5.6f},
        {'H', 5177, 5.2f},
        {'D', 4156, 4.17f},
        {'U', 3680, 3.7f},
        {'C', 3384, 3.4f},
        {'L', 3226, 3.24f},
        {'G', 2924, 2.94f},
        {'M', 2784, 2.8f},
        {'O', 2312, 2.32f},
        {'B', 2176, 2.19f},
        {'F', 1701, 1.71f},
        {'W', 1383, 1.39f},
        {'Z', 1351, 1.36f},
        {'K', 1329, 1.33f},
        {'V', 912, 0.92f},
        {'P', 841, 0.84f},
        {'Ü', 636, 0.64f},
        {'Ä', 511, 0.51f},
        {'Ö', 363, 0.36f},
        {'ß', 189, 0.19f},
        {'J', 186, 0.19f},
        {'X', 112, 0.11f},
        {'Q', 73, 0.07f},
        {'Y', 56, 0.06f}
    };

Aber jetzt das Gemeine. Ich habe Zeichen zwischen ASCII 32 und 122 (beide inklusive) verschlüsselt:
Java:
"jx!,3 !&,x&?3 !&,x*3wx&3j'*,ux*zx&?3yx*&3wx*3_&wx*3i'#t$!x&3-&w3^'&+'&t&,!x&3$xux&3w!x3U$!&w,x0,xA3Tuzx+v !xwx&3/' &x&3f!x3!&3U-v +,tu t-+x&3t&3wx*3^+,x3wx+3fx%t&,!#?3x!&x+3z*'x&3f(*tv '2xt&+A3X!&3#$x!&x+3Uv $x!&3&t%x&+3W-wx&3y$!x,3w-*v 3! *x&3b*,3-&w3.x*+'*z,3+!x3%!,3wx&3&,!zx&3exzx$!t$!x&A"

Entschlüssele den Text!
 

Zurück
Oben