Finish lab
This commit is contained in:
parent
88c32093a3
commit
6da3e784cd
9 changed files with 101 additions and 78 deletions
|
@ -4,23 +4,61 @@
|
|||
|
||||
Als Programmiersprache wurde Go\footnote{\href{https://go.dev/}{https://go.dev/}} ausgewählt. Das Analysetool soll jeden Buchstaben eines Textes auf Häufigkeit untersuchen.
|
||||
|
||||
Im Prgram wird mit einem Strukt Array gearbeitet. Darin wird der Buchstabe swowohl groß, als auch klein als String abgespeichert. Außerdem wird die dazugehörige Anzahl mit der Häufigkeit abgespeichert. Dadurch kann nach dem Durchlauf der Datensatz einfach sortiert werden.
|
||||
Im Prgram wird mit einem Array aus Buchstaben-Strukts gearbeitet.
|
||||
|
||||
Das Alphabet wird im “Unicode Code Point” genutzt damit es einfach verglichen werden kann. Zum Start des Programmes wird das Alphabet in dem ``letters''-Array initialisiert (Abb. \ref{fig:Initialisierung mit Unicode}).
|
||||
\begin{lstlisting}
|
||||
type letter struct {
|
||||
upperCase string
|
||||
lowerCase string
|
||||
count int
|
||||
frequency float64
|
||||
}
|
||||
type letterList []letter
|
||||
|
||||
func (l letterList) Len() int {
|
||||
return len(l)
|
||||
}
|
||||
|
||||
func (l letterList) Less(i, j int) bool {
|
||||
return l[i].frequency > l[j].frequency
|
||||
}
|
||||
|
||||
func (l letterList) Swap(i, j int) {
|
||||
l[i], l[j] = l[j], l[i]
|
||||
}
|
||||
\end{lstlisting}
|
||||
|
||||
\begin{figure}[H]
|
||||
\begin{center}
|
||||
\includegraphics[width=0.6\textwidth]{part1/initAlphabet}
|
||||
\caption{Initialisierung mit Unicode}
|
||||
\label{fig:Initialisierung mit Unicode}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
Darin wird der Buchstabe swowohl groß, als auch klein als String abgespeichert. Außerdem wird die dazugehörige Anzahl mit der Häufigkeit abgespeichert. Dadurch kann nach dem Durchlauf der Datensatz einfach sortiert werden.
|
||||
|
||||
Das Alphabet wird im “Unicode Code Point” genutzt damit es einfach verglichen werden kann. Zum Start des Programmes wird das Alphabet in dem ``letters''-Array initialisiert.
|
||||
|
||||
\begin{lstlisting}
|
||||
var letters = make([]letter, lettersInTheAlphabet)
|
||||
|
||||
func initLetterStruct() {
|
||||
for i := 0; i < lettersInTheAlphabet; i++ {
|
||||
letters[i].upperCase = string(rune('A' + i))
|
||||
letters[i].lowerCase = string(rune('A' + i + 32))
|
||||
}
|
||||
}
|
||||
\end{lstlisting}
|
||||
|
||||
Danach wird die angegebene Datei gelesen und als String geparsed. Der String wird anschließend mit der ``strings.Count''-Funktion gelesen und die gelesene Anzahl im Struct gespeichert.
|
||||
|
||||
Wenn alle Buchstaben gelesen wurden, kann die totale Anzahl an Buchstaben genommen werden um die Häufigkeit zu berechnen.
|
||||
\begin{lstlisting}
|
||||
func countLetters(inputText string) int {
|
||||
totalCount := 0
|
||||
for i := 0; i < lettersInTheAlphabet; i++ {
|
||||
letters[i].count +=
|
||||
strings.Count(inputText, letters[i].lowerCase) +
|
||||
strings.Count(inputText, letters[i].upperCase)
|
||||
totalCount += letters[i].count
|
||||
}
|
||||
return totalCount
|
||||
}
|
||||
\end{lstlisting}
|
||||
|
||||
Bevor die sortierte Ausgabe erfolgt werden die Daten mit einem Plotter in einer ``barChart.png'' datei gezeichnet (Abb. \ref{fig:Visualisierung von plaintext.txt}).
|
||||
Wenn alle Buchstaben gelesen wurden, kann die totale Anzahl an Buchstaben genommen werden um die Häufigkeit zu berechnen. Bevor die sortierte Ausgabe erfolgt werden die Daten mit gonum.org/v1/plot/plotter\footnote{\href{https://pkg.go.dev/gonum.org/v1/plot/plotter}{https://pkg.go.dev/gonum.org/v1/plot/plotter}} in einer ``barChart.png'' Datei gezeichnet (Abb. \ref{fig:Visualisierung von plaintext.txt}).
|
||||
|
||||
\begin{figure}[H]
|
||||
\begin{center}
|
||||
|
@ -44,7 +82,11 @@ Zuletzt wird das soriterte Ergebnis ausgegeben (Abb. \ref{fig:Ergebnis von plain
|
|||
|
||||
\subsection{Verschlüsselung}
|
||||
|
||||
Zur verschlüsselung wird ebenfalls “Unicode Code Point” genutzt. Dadurch kann der jeweilige Text einfach um die angegeben Zahl verschoben werden. Dabei zu beachten ist das Ende des Alphabetes, da von vorne begonnen werden muss. Außerdem sind sollten Kleinbuchstaben und Großbuchstaben beachtet werden. Alle Zeichen die keine Buchstaben sind, werden ohne verschlüsselung ausgegeben. Der key lautet ``florianhoss''.
|
||||
Zur verschlüsselung wird ebenfalls “Unicode Code Point” genutzt. Dadurch kann der jeweilige Text einfach um die angegeben Zahl verschoben werden. Dabei zu beachten ist das Ende des Alphabetes, da von vorne begonnen werden muss. Außerdem sind sollten Kleinbuchstaben und Großbuchstaben beachtet werden. Alle Zeichen die keine Buchstaben sind, werden ohne verschlüsselung ausgegeben. Nach dem Lompilieren kann die Verschlüsselung einfach mit Parametern gestartet werden:
|
||||
|
||||
\begin{verbatim}
|
||||
./tool -k florianhoss -f input.txt
|
||||
\end{verbatim}
|
||||
|
||||
\subsubsection{Originaler Text (input.txt)}
|
||||
|
||||
|
@ -60,7 +102,7 @@ Zur verschlüsselung wird ebenfalls “Unicode Code Point” genutzt. Dadurch ka
|
|||
|
||||
\newpage
|
||||
|
||||
Das erneute Ausführen der Analyse ergibt eine komplett unterschiedliche Verteilung der Buchstaben (Abb. \ref*{fig:Visualisierung von input.txt} und Abb. \ref*{fig:Visualisierung von output.txt}).
|
||||
Das erneute Ausführen der Analyse ergibt eine gleichmäßigere Verteilung der Buchstaben (Abb. \ref*{fig:Visualisierung von input.txt} und Abb. \ref*{fig:Visualisierung von output.txt}). Damit ist eine Häufigkeitsanalyse auf den ersten Blick nicht mehr möglich.
|
||||
|
||||
\begin{figure}[H]
|
||||
\begin{center}
|
||||
|
@ -78,4 +120,4 @@ Das erneute Ausführen der Analyse ergibt eine komplett unterschiedliche Verteil
|
|||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
Eine Häufigkeitsanalyse kann Hilfreich sein, da in unterschiedlichen Sprachen andere Häufigkeiten auftreten können und damit der Text einfacher analysiert werden kann.
|
||||
Eine Häufigkeitsanalyse kann Hilfreich sein, da in unterschiedlichen Sprachen andere Häufigkeiten auftreten können und damit der Text einfacher analysiert werden kann. Wenn bei einem Cipher eine Häufigkeitsanalyse erfolgreich durchgeführt werden kann, können Wörter oder Sätze erkannt und entschlüsselt werden.
|
||||
|
|
Reference in a new issue