Frequenzanalyse in C#

Wie kann man einen monoalphabetisch verschlüsselten Text entschlüsseln? Nun die Frequenzanalyse ist ein Ansatz der dabei helfen kann den Schlüssel zu finden (z.B. bei der Cäsar Verschlüsselung). Dieser wird zwar nicht immer funktionieren, die Wahrscheinlichkeit hierfür wächst aber mit der Länge der verschlüsselten Nachricht. Wie geht das?

Nimmt man beispielsweise einen englischen Text so kann man eigentlich fast immer davon ausgehen, dass die Verteilung der Buchstaben wie folgt aussehen könnte.

Wie man sieht ist ‚E‘ der häufigste Buchstabe in der Englischen Sprache. Also ist die Frequenzanalyse nichts anderes als das Zählen von Buchstaben im Text. So können wir oft davon ausgehen, dass das am öftesten vorkommende Zeichen in einem verschlüsselten Text ein ‚E‘ sein könnte. Das gilt nicht immer bei kurzen Texten wird das oft nicht zutreffen. Bei längeren Texten ist es schon wahrscheinlicher. Hier eine Methode mit der man eine Frequenzanalyse an einem Text durchführen kann, viel Spaß!

//Die Methode bekommt einen text (string als parameter).
        public static Dictionary<char, int> frequencyAnalysisEng(string text)
        {
            //Wir erstellen ein Dictionary mit dem Alphabet und setzen die Anzahl eines jeden Buchstaben auf 0.
            Dictionary<char, int> result = new Dictionary<char, int>()
            {
                {'A', 0}, {'B', 0}, {'C', 0}, {'D', 0}, {'E', 0}, {'F', 0}, {'G', 0},
                {'H', 0}, {'I', 0}, {'J', 0}, {'K', 0}, {'L', 0}, {'M', 0}, {'N', 0},
                {'O', 0}, {'P', 0}, {'Q', 0}, {'R', 0}, {'S', 0}, {'T', 0}, {'U', 0},
                {'V', 0}, {'W', 0}, {'X', 0}, {'Y', 0}, {'Z', 0}

            };

            //Nun iterieren wir durch den Textund zählen die Buchstaben.
            foreach(char c in text.ToUpper())
            {
                //Wenn das aktuelle Zeichen ein Buchstabe aus dem Alphabet ist.
                if(result.ContainsKey(c))
                {
                    //Erhöhe die Anzahl seiner Vorkommnisse um eins.
                    result[c] += 1;
                }
            }

            return result;
        }
Advertisements
Dieser Beitrag wurde unter .NET, Algorithmen, Beispiel, Beispiel, c#, Chiffre, Frequenzanalyse, Kryptologie, Mathematik, Programmierung, Uncategorized abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Eine Antwort zu Frequenzanalyse in C#

  1. Pingback: Die Vigenère-Verschlüsselung in C# | RealityBites

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

w

Verbinde mit %s