using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace CryptanalysisCore { public static class Storage { public static string ConfPath; public const string FrequencyFile = "frequency.xml"; public const string UniqueFile = "unique.txt"; public const string DictionaryFile = "dictionary.dic"; public const string TextsFile = "texts.txt"; public const string TextsFolder = "texts/"; public static string[] Letters { get; private set; } public static string[] Vowels { get; private set; } /// /// Seznam podporovaných jazyků /// public enum Languages { czech, english, germany, french } /// /// Seznam podporovaných šifer /// public enum Ciphers { caesar, monoalphabetic, vigenere, trans } /// /// Dvojice jazyk : charakteristiky daného jazyka /// private static Dictionary langChars; /// /// Uchovává seznamy crackovacích algoritmů pro jednotlivé šifry /// public static Dictionary CrackAlgorithms { get; private set; } static Storage() { //if (Environment.MachineName == "LUKASHAVRLANT") ConfPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Cryptanalysis\\"; //else // ConfPath = "items\\"; SetCiphers(); SetLanguages(); SetCrackAlgorithms(); SetLetters(); } private static void SetLetters() { Letters = LettersToArray("abcdefghijklmnopqrstuvwxyz"); Vowels = LettersToArray("aeuioy"); } private static string[] LettersToArray(string letters) { return letters.ToCharArray().Select(x => x.ToString()).ToArray(); } /// /// Načte z disku požadovaná data /// public static void LoadFiles(Action actionIfNotSucces) { try { langChars = new Dictionary(); var names = Enum.GetNames(typeof(Languages)); foreach (string name in names) { Languages l = (Languages)Enum.Parse(typeof(Languages), name); langChars[l] = new LangCharacteristic(l); } } catch (Exception) { actionIfNotSucces(); } } private static void SetCrackAlgorithms() { CrackAlgorithms = new Dictionary(); string[] caesarAlgs = new string[] { "Útok hrubou silou", "Trojúhelníkový útok" }; string[] monoalphabeticAlgs = new string[] { "Frekvenční analýza" }; string[] vigenereAlgs = { "Útok hrubou silou", }; string[] transAlgs = { "Útok odhadnutím délky klíče" }; CrackAlgorithms[Ciphers.caesar] = caesarAlgs; CrackAlgorithms[Ciphers.monoalphabetic] = monoalphabeticAlgs; CrackAlgorithms[Ciphers.vigenere] = vigenereAlgs; CrackAlgorithms[Ciphers.trans] = transAlgs; } /// /// Naplnění tabulky šifrových jmen /// private static void SetCiphers() { CiphersID = new Dictionary(); CiphersID["Caesarova šifra"] = Ciphers.caesar; CiphersID["Monoalfabetická šifra"] = Ciphers.monoalphabetic; CiphersID["Vigenérova šifra"] = Ciphers.vigenere; CiphersID["Transpoziční šifra"] = Ciphers.trans; } /// /// Naplnění tabulky jazyků /// private static void SetLanguages() { LanguagesID = new Dictionary(); LanguagesID["čeština"] = Languages.czech; LanguagesID["angličtina"] = Languages.english; LanguagesID["němčina"] = Languages.germany; LanguagesID["francouzština"] = Languages.french; } /// /// Vrátí charakteristicky jazyka (tohle je ale blbost, to se přepíše) /// /// /// public static LangCharacteristic GetLangChar(Languages language) { return langChars[language]; } /// /// Slovník název šifry : enum ty šifry /// public static Dictionary CiphersID; /// /// Vrátí seznam všech podporovaných šifer /// public static string[] CiphersNames { get { return CiphersID.Keys.ToArray(); } } /// /// Slovník název jazyka : enum jazyka /// public static Dictionary LanguagesID; /// /// Obsahuje seznam všech podporovaných jazyků /// public static string[] LanguagesNames { get { return LanguagesID.Keys.ToArray(); } } } }