-
Notifications
You must be signed in to change notification settings - Fork 0
/
Opis projektu (old).txt
178 lines (136 loc) · 5.03 KB
/
Opis projektu (old).txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
Wojciech Kieloch 339952
Implementacja Enigmy M3 w C++.
Będziemy wspierać:
- Szyfrowanie/deszyfrowanie tekstu składającego się ze znaków łacińskich
- 5 typów rotorów i 3 typy reflektorów
- Ustalanie ustawień:
* Kolejność rotorów
* Początkową pozycję rotorów
* Ustawienia pierścienia (dodatkowe przesunięcie wyniku względem litery w alfabecie)
* Połączenia liter (zamiana liter na początku i na końcu szyfrowania znaku)
- Odczyt i zapis do pliku
Logika Enigmy będzie znajdować się w oddzielnej bibliotece. Interfejsem implementacji będzie konsola.
[Część biblioteczna]
Klasy:
* UserRotor
Przechowuje rotor użytkownika
Pola:
- string RotorNumber
Nazwa rotora
- char InitialPosition
- char RingSetting
Metody:
public UserRotor(string RotorNumber, char InitalPosition, char RingSetting)
Przypisuje pola.
* UserSettings
Przechowuje ustawienia użytkownika
Pola:
- string ReflectorName
Nazwa reflektora
- UserRotor* Rotors
Rotory
- vector<string> PlugboardConnections
Połączenia literowe
Metody:
- public UserSettings(string ReflectorName, UserRotor* Rotors, vector<string> PlugboardConnections)
Ustawia pola
- public bool CanBeConverted()
Zwraca prawdę, jeżeli ustawienia użytkownika są prawidłowe.
* EnigmaRotor
Przechowuje informację na temat rotoru w przyjaznym formacie.
Pola:
- string AlphabetRing
Alfabet rotoru.
- int Notch
Miejsca przeskoku dla rotora
- int Position
Pozycja rotora
- int RingSetting
Ustawienia pierścienia rotora
Metody:
- EnigmaRotor(string AlphabetRing, int Notch, int InitialPosition, int RingSetting)
Ustawia pola.
* EnigmaSettings
Przechowuje informację na temat ustawień w przyjaznym formacie.
Pola:
- string ReflectorAlphabet
Alfabet reflektora
- EnigmaRotor* Rotors
Rotory
- Map<char, char> PlugboardConnections
Połączenia liter
Metody:
EnigmaSettings(string ReflectorAlphabet, EnigmaRotor* Rotors, Map<char, char> PlugboardConnections)
Ustawia pola.
* SettingsConversion
Klasa zaprojektowana do konwersji ustawień
Pola:
- const int ValidNumberOfRotors = 3;
- const int MaxNumberOfConnections = 13;
Metody:
- EnigmaSettings ConvertToEnigmaSettings(UserSettings UserOptions)
Konwertuje ustawienia użytkownika do ustawień przyjaznych enigmie
- EnigmaRotor* ConvertRotors(UserRotor* UserRotors)
Konwertuje rotory
- EnigmaRotor ConvertRotor(UserRotor Rotor)
Konwertuje rotor
- int ConvertCharacterToDecimal(char c)
Konwertuje symbol np. pozycji na liczbę
- map<char, char> CreatePlugboardConnections(vector<string> Connections)
Konstruuje połączenia literowe ze stringów
- string ConvertRotorAlphabet(string RotorNumber)
Zwraca alfabet przypisany do numeru rotora
- int ConvertRotorNotch(string RotorNumber)
Zwraca numer miejsca przeskoku dla symbolu rotora
- string ConvertReflector(string ReflectorName)
Zwraca alfabet przypisany do symbolu reflektora
* Encoder
Szyfruje tekst.
Pola:
- const int alphabetLength = 26
- EnigmaSettings Settings;
Ustawienia przyjazne Enigmie
Metody:
- public Encoder(UserSettings Settings)
Bierze ustawienia użytkownika i konwertuje je (poprzez inną funkcję) na ustawienia przyjazne Enigmie (EnigmaSettings)
- public string EncryptText(string origninalText)
Szyfruje tekst
- public char* ReturnRotorsPosition()
Zwraca aktualne pozycje rotorów
- char EncryptChar(char letter)
Szyfruje znak
- char EnigmaPreRefEncoding (char originalCharacter, int encryptionSet)
Etap szyfrowania przed reflektorem
Encryption set stanowi informację, który rotor chcemy wykorzystać.
- char EnigmaPostRefEncoding(char originalCharacter, int encryptionSet)
Etap szyfrowania po reflektorze
Encryption set stanowi informację, który rotor chcemy wykorzystać.
- void StepRotors()
Przesuwa rotory
- void SetNewSettings(UserSettings Settings)
Aktualizuje ustawienia.
Klasy Encoder, UserSettings, UserRotor stanowią publiczną część biblioteki.
[Koniec części bibliotecznej]
[Część implementacyjna]
Klasa:
* Encrypter
Główna logika implemetnacji.
Pola:
- char** args;
Kopia argumentów do dyspozycji objektu
- int argc
Liczba argumentów
Metody:
- Encrypter(char** args, int argc)
Przpisuje pola.
- void Encrypt()
Główna logika. Sprawdza, czy ustawiania da się skonwertować, czy plik istnieje, wypisuje informacje
- UserSettings BuildUserSettings()
Tworzy ustawienia użytkownika z argumentów.
- void ChangeArgs(char ** args)
Zmienia argumenty.
* FileHandler
Objemuje działania związane z zapisem.
Metody:
- void CreateEncryptedFile(string sourceFilePath, string encryptedText)
Tworzy nowy plik z zaszyfrowaną zawartością, zapewnia unikalność nazwy.