diff --git a/src/cipher_analytical_machine/analyzers/caesar.clj b/src/cipher_analytical_machine/analyzers/caesar.clj index e538c1e..77f337b 100644 --- a/src/cipher_analytical_machine/analyzers/caesar.clj +++ b/src/cipher_analytical_machine/analyzers/caesar.clj @@ -1,8 +1,10 @@ (ns cipher-analytical-machine.analyzers.caesar (:require [cipher-analytical-machine.ciphers.caesar :as caesar] [clojure.string :as cs] + [cipher-analytical-machine.analyzers.language :as language] [cipher-analytical-machine.analyzers.analyzers :as ca]) (:import [cipher_analytical_machine.ciphers.caesar Decrypted] + [cipher_analytical_machine.analyzers.caesar IsNonsense] [cipher_analytical_machine.analyzers.caesar FrequencyAnalyzer]) (:gen-class)) @@ -50,10 +52,13 @@ (defn frequency-analizer-get-plaintext "Return the plaintext from a ciphertext using simple analizer. The function is case-insensitive." - [ciphertext symbols letter-frequencies-string] + [ciphertext symbols letter-frequencies-string language-code] (let [decrypt (reify Decrypted (decrypt [this message key symbols] - (caesar/decrypt-message message key symbols)))] - (-> (new FrequencyAnalyzer ciphertext symbols letter-frequencies-string decrypt) + (caesar/decrypt-message message key symbols))) + is-nonsense (reify IsNonsense + (isNonsense [this message] + (language/is-nonsense? message language-code)))] + (-> (new FrequencyAnalyzer ciphertext symbols letter-frequencies-string decrypt is-nonsense) .crack))) diff --git a/src/cipher_analytical_machine/cli/cli.clj b/src/cipher_analytical_machine/cli/cli.clj index c92d888..7c5fa5e 100644 --- a/src/cipher_analytical_machine/cli/cli.clj +++ b/src/cipher_analytical_machine/cli/cli.clj @@ -160,7 +160,8 @@ (= analyzer "Frequency") (caesar-analyzers/frequency-analizer-get-plaintext message symbols - (symbol-frequencies/map-to-string frequencies))))) + (symbol-frequencies/map-to-string frequencies) + (:language options "en"))))) (defn cracking-actions [options arguments action-type] diff --git a/src/main/java/cipher_analytical_machine/analyzers/caesar/FrequencyAnalyzer.java b/src/main/java/cipher_analytical_machine/analyzers/caesar/FrequencyAnalyzer.java index c499de3..ac75e0f 100644 --- a/src/main/java/cipher_analytical_machine/analyzers/caesar/FrequencyAnalyzer.java +++ b/src/main/java/cipher_analytical_machine/analyzers/caesar/FrequencyAnalyzer.java @@ -1,5 +1,6 @@ package cipher_analytical_machine.analyzers.caesar; +import cipher_analytical_machine.analyzers.caesar.IsNonsense; import cipher_analytical_machine.ciphers.caesar.Decrypted; import java.util.HashMap; @@ -11,12 +12,14 @@ public class FrequencyAnalyzer { private String symbols; private String symbol_frequences; private Decrypted decryptor; + private IsNonsense isNonsense; - public FrequencyAnalyzer(String ciphertext, String symbols, String symbol_frequences, Decrypted decryptor) { + public FrequencyAnalyzer(String ciphertext, String symbols, String symbol_frequences, Decrypted decryptor, IsNonsense isNonsense) { this.ciphertext = ciphertext; this.symbol_frequences = symbol_frequences; this.symbols = symbols; this.decryptor = decryptor; + this.isNonsense = isNonsense; } public String crack() { diff --git a/src/main/java/cipher_analytical_machine/analyzers/caesar/IsNonsense.java b/src/main/java/cipher_analytical_machine/analyzers/caesar/IsNonsense.java new file mode 100644 index 0000000..c956921 --- /dev/null +++ b/src/main/java/cipher_analytical_machine/analyzers/caesar/IsNonsense.java @@ -0,0 +1,6 @@ +package cipher_analytical_machine.analyzers.caesar; + +public interface IsNonsense { + boolean isNonsense(String message); +} +