Fix the typo "frequences" to frequencies.
This commit is contained in:
@@ -21,16 +21,16 @@
|
|||||||
|
|
||||||
(defn chi-squared-statistic
|
(defn chi-squared-statistic
|
||||||
"To calculate the frequency distribution of a language. More detail about the algorithm here: http://practicalcryptography.com/cryptanalysis/text-characterisation/chi-squared-statistic/"
|
"To calculate the frequency distribution of a language. More detail about the algorithm here: http://practicalcryptography.com/cryptanalysis/text-characterisation/chi-squared-statistic/"
|
||||||
[text letter-frequences]
|
[text letter-frequencies]
|
||||||
(let [length-text (count text)
|
(let [length-text (count text)
|
||||||
letter-counts (count-characters (cs/lower-case text))]
|
letter-counts (count-characters (cs/lower-case text))]
|
||||||
;letter-counts
|
;letter-counts
|
||||||
(reduce
|
(reduce
|
||||||
(fn [acc [char count]]
|
(fn [acc [char count]]
|
||||||
(+ acc
|
(+ acc
|
||||||
(if (contains? letter-frequences char)
|
(if (contains? letter-frequencies char)
|
||||||
(chi-squared-letter-statistic count
|
(chi-squared-letter-statistic count
|
||||||
(get letter-frequences char)
|
(get letter-frequencies char)
|
||||||
length-text)
|
length-text)
|
||||||
0)))
|
0)))
|
||||||
0
|
0
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
|
|
||||||
(defn get-all-scores
|
(defn get-all-scores
|
||||||
"For pairs (key, plaintext) finds scores and return list of pairs [key, score]."
|
"For pairs (key, plaintext) finds scores and return list of pairs [key, score]."
|
||||||
[letter-frequences pairs]
|
[letter-frequencies pairs]
|
||||||
(map (fn [[key text]]
|
(map (fn [[key text]]
|
||||||
[key (ca/chi-squared-statistic text letter-frequences)])
|
[key (ca/chi-squared-statistic text letter-frequencies)])
|
||||||
pairs))
|
pairs))
|
||||||
|
|
||||||
(defn get-min-score-pair
|
(defn get-min-score-pair
|
||||||
@@ -34,18 +34,18 @@
|
|||||||
|
|
||||||
(defn get-key
|
(defn get-key
|
||||||
"To find the key with frequencies of letters."
|
"To find the key with frequencies of letters."
|
||||||
[ciphertext symbols letter-frequences]
|
[ciphertext symbols letter-frequencies]
|
||||||
(->> (get-all-texts ciphertext symbols)
|
(->> (get-all-texts ciphertext symbols)
|
||||||
(get-all-scores letter-frequences)
|
(get-all-scores letter-frequencies)
|
||||||
(get-min-score-pair)
|
(get-min-score-pair)
|
||||||
(first)))
|
(first)))
|
||||||
|
|
||||||
(defn get-plaintext
|
(defn get-plaintext
|
||||||
"Return the plaintext from a ciphertext. The function is case-insensitive."
|
"Return the plaintext from a ciphertext. The function is case-insensitive."
|
||||||
[ciphertext symbols letter-frequences]
|
[ciphertext symbols letter-frequencies]
|
||||||
(let [ciphertext (cs/lower-case ciphertext)]
|
(let [ciphertext (cs/lower-case ciphertext)]
|
||||||
(caesar/decrypt-message ciphertext
|
(caesar/decrypt-message ciphertext
|
||||||
(get-key ciphertext symbols letter-frequences)
|
(get-key ciphertext symbols letter-frequencies)
|
||||||
symbols)))
|
symbols)))
|
||||||
|
|
||||||
(defn frequency-analizer-get-plaintext
|
(defn frequency-analizer-get-plaintext
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
[cipher-analytical-machine.ciphers.caesar :as caesar]
|
[cipher-analytical-machine.ciphers.caesar :as caesar]
|
||||||
[cipher-analytical-machine.analyzers.caesar :as caesar-analyzers]
|
[cipher-analytical-machine.analyzers.caesar :as caesar-analyzers]
|
||||||
[cipher-analytical-machine.symbols.factories :as sf]
|
[cipher-analytical-machine.symbols.factories :as sf]
|
||||||
[cipher-analytical-machine.symbols.frequences :as symbol-frequences]
|
[cipher-analytical-machine.symbols.frequencies :as symbol-frequencies]
|
||||||
[clojure.string :as cs]
|
[clojure.string :as cs]
|
||||||
[clojure.tools.cli :refer [parse-opts]])
|
[clojure.tools.cli :refer [parse-opts]])
|
||||||
(:gen-class))
|
(:gen-class))
|
||||||
@@ -155,7 +155,7 @@
|
|||||||
[options arguments action-type]
|
[options arguments action-type]
|
||||||
(let [message (:message options)
|
(let [message (:message options)
|
||||||
symbols (:symbols options)
|
symbols (:symbols options)
|
||||||
frequencies symbol-frequences/english-letter-frequences]
|
frequencies symbol-frequencies/english-letter-frequencies]
|
||||||
(cond
|
(cond
|
||||||
(= action-type :cracking)
|
(= action-type :cracking)
|
||||||
(caesar-analyzers/get-plaintext message symbols frequencies)
|
(caesar-analyzers/get-plaintext message symbols frequencies)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
(ns cipher-analytical-machine.symbols.frequences
|
(ns cipher-analytical-machine.symbols.frequencies
|
||||||
(:gen-class))
|
(:gen-class))
|
||||||
|
|
||||||
(def english-letter-frequences {
|
(def english-letter-frequences {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
(:require
|
(:require
|
||||||
[clojure.test :refer :all]
|
[clojure.test :refer :all]
|
||||||
[cipher-analytical-machine.analyzers.caesar :refer :all]
|
[cipher-analytical-machine.analyzers.caesar :refer :all]
|
||||||
[cipher-analytical-machine.symbols.frequences :as sf]
|
[cipher-analytical-machine.symbols.frequencies :as sf]
|
||||||
[cipher-analytical-machine.analyzers.analyzers :as ca]
|
[cipher-analytical-machine.analyzers.analyzers :as ca]
|
||||||
[clojure.string :as cs]))
|
[clojure.string :as cs]))
|
||||||
|
|
||||||
@@ -25,9 +25,9 @@
|
|||||||
(testing "There're 27 combinations for a 'Hello World'."
|
(testing "There're 27 combinations for a 'Hello World'."
|
||||||
(let [ciphertext "khoorczruog"
|
(let [ciphertext "khoorczruog"
|
||||||
symbols "abcdefghijklmnopqrstuvwxyz "
|
symbols "abcdefghijklmnopqrstuvwxyz "
|
||||||
frequences sf/english-letter-frequences
|
frequencies sf/english-letter-frequencies
|
||||||
text-pairs (get-all-texts ciphertext symbols)]
|
text-pairs (get-all-texts ciphertext symbols)]
|
||||||
(is (= 27 (count (get-all-scores frequences text-pairs)))))))
|
(is (= 27 (count (get-all-scores frequencies text-pairs)))))))
|
||||||
|
|
||||||
(deftest get-min-score-pair-test
|
(deftest get-min-score-pair-test
|
||||||
(testing "If a key is one, then the min score pair is 15."
|
(testing "If a key is one, then the min score pair is 15."
|
||||||
@@ -40,47 +40,47 @@
|
|||||||
ciphertext "khoorczruog"
|
ciphertext "khoorczruog"
|
||||||
key 3
|
key 3
|
||||||
symbols "abcdefghijklmnopqrstuvwxyz "
|
symbols "abcdefghijklmnopqrstuvwxyz "
|
||||||
frequences sf/english-letter-frequences]
|
frequencies sf/english-letter-frequencies]
|
||||||
(testing "The plaintext is encrypted with 3 as the key."
|
(testing "The plaintext is encrypted with 3 as the key."
|
||||||
(is (= key (get-key ciphertext symbols frequences)))))
|
(is (= key (get-key ciphertext symbols frequencies)))))
|
||||||
|
|
||||||
(let [; З поеми "Кавказ" Тараса Григоровича Шевченка:
|
(let [; З поеми "Кавказ" Тараса Григоровича Шевченка:
|
||||||
plaintext "Борітеся – поборете, Вам Бог помагає! За вас правда, за вас слава. І воля святая!"
|
plaintext "Борітеся – поборете, Вам Бог помагає! За вас правда, за вас слава. І воля святая!"
|
||||||
ciphertext "жхчощйшде–ецхжхчйщй,езєуежхиецхуєиєк!емєезєшецчєзїє,емєезєшештєзє.еоезхтдешздщєд!"
|
ciphertext "жхчощйшде–ецхжхчйщй,езєуежхиецхуєиєк!емєезєшецчєзїє,емєезєшештєзє.еоезхтдешздщєд!"
|
||||||
key 7
|
key 7
|
||||||
symbols "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя "
|
symbols "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя "
|
||||||
frequences sf/ukrainian-letter-frequences]
|
frequencies sf/ukrainian-letter-frequencies]
|
||||||
(testing "The plaintext is encrypted with 3 as the key."
|
(testing "The plaintext is encrypted with 3 as the key."
|
||||||
(is (= key (get-key ciphertext symbols frequences))))))
|
(is (= key (get-key ciphertext symbols frequencies))))))
|
||||||
|
|
||||||
(deftest get-plaintext-test
|
(deftest get-plaintext-test
|
||||||
(let [plaintext "hello world"
|
(let [plaintext "hello world"
|
||||||
ciphertext "khoorczruog"
|
ciphertext "khoorczruog"
|
||||||
symbols "abcdefghijklmnopqrstuvwxyz "
|
symbols "abcdefghijklmnopqrstuvwxyz "
|
||||||
frequences sf/english-letter-frequences]
|
frequencies sf/english-letter-frequencies]
|
||||||
(testing "The plaintext is encrypted with 3 as the key."
|
(testing "The plaintext is encrypted with 3 as the key."
|
||||||
(is (= plaintext (get-plaintext ciphertext symbols frequences))))
|
(is (= plaintext (get-plaintext ciphertext symbols frequencies))))
|
||||||
|
|
||||||
(testing "The ciphertext is case-insensitive."
|
(testing "The ciphertext is case-insensitive."
|
||||||
(is (= plaintext (get-plaintext "KhoorcZruog" symbols frequences)))))
|
(is (= plaintext (get-plaintext "KhoorcZruog" symbols frequencies)))))
|
||||||
|
|
||||||
(let [; З поеми "Кавказ" Тараса Григоровича Шевченка:
|
(let [; З поеми "Кавказ" Тараса Григоровича Шевченка:
|
||||||
plaintext "Борітеся – поборете, Вам Бог помагає! За вас правда, за вас слава. І воля святая!"
|
plaintext "Борітеся – поборете, Вам Бог помагає! За вас правда, за вас слава. І воля святая!"
|
||||||
ciphertext "жхчощйшде–ецхжхчйщй,езєуежхиецхуєиєк!емєезєшецчєзїє,емєезєшештєзє.еоезхтдешздщєд!"
|
ciphertext "жхчощйшде–ецхжхчйщй,езєуежхиецхуєиєк!емєезєшецчєзїє,емєезєшештєзє.еоезхтдешздщєд!"
|
||||||
key 7
|
key 7
|
||||||
symbols "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя "
|
symbols "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя "
|
||||||
frequences sf/ukrainian-letter-frequences]
|
frequencies sf/ukrainian-letter-frequencies]
|
||||||
(testing "The ciphertext is case-insensitive."
|
(testing "The ciphertext is case-insensitive."
|
||||||
(is (= (cs/lower-case plaintext)
|
(is (= (cs/lower-case plaintext)
|
||||||
(get-plaintext ciphertext symbols frequences))))))
|
(get-plaintext ciphertext symbols frequencies))))))
|
||||||
|
|
||||||
(deftest frequency-analizer-get-plaintext-test
|
(deftest frequency-analizer-get-plaintext-test
|
||||||
(let [plaintext "abc"
|
(let [plaintext "abc"
|
||||||
ciphertext "bca"
|
ciphertext "bca"
|
||||||
key 1
|
key 1
|
||||||
symbols "abc"
|
symbols "abc"
|
||||||
frequences sf/english-letter-frequences]
|
frequencies sf/english-letter-frequencies]
|
||||||
(testing "The ciphertext is 'bca' and key is 1."
|
(testing "The ciphertext is 'bca' and key is 1."
|
||||||
(is (= plaintext
|
(is (= plaintext
|
||||||
(frequency-analizer-get-plaintext ciphertext symbols frequences))))))
|
(frequency-analizer-get-plaintext ciphertext symbols frequencies))))))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user