Szyfr VIC został wymyślony w taki sposób, aby można go było używać bez wykorzystania sprzętu elektronicznego. Sposób szyfrowania wymaga jedynie znajomości dodawania. Jednak najciekawszym elementem szyfru jest tabela używana do szyfrowania.
Każda tabela szyfrowania składa się z 10 kolumn, których kolejne nagłówki to kolejne cyfry począwszy od 0. W pierwszym wierszu o pustym nagłówku wpisuje się maksymalnie z 10 znaków. Oznaczałoby to, że szyfr działałby tylko dla dziesięciu znaków.
Z tego powodu przyjmuje się, że niektóre pola mogą pozostać wolne. Wtedy dla każdej kolumny, która ma puste pole w pierszym wierszu tworzy się wiersz o nagłówku takim jak nagłówek odpowiadającej mu kolumny. Każdy wiersz prócz pierwszego musi być wykorzystany. Znaki wpisane do tabeli pozostają dowolne.
Przyjmuje się, że dla alfabetu łacińskiego wystarczy w pierszym wierszu zostawić dla wolne pola, aby uzyskać tabelkę, którą można uzupełnić 28 znakami tj. 26 znaków alfabetu oraz dwa znaki dodatkowe. Zazwyczaj w pierwszym wierszu wpisuje się znaki najczęściej występujące w alfabecie.
Przykładowo tabelka wygląda następująco:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|---|
A | I | E | O | N | S | R | G | |||
3 | M | H | Y | V | D | Z | K | Q | / | T |
7 | W | C | X | F | J | B | P | L | . | U |
Na podstawie określonej tabelki można przejść do szyfrowania danych. W celu zaszyfrowania danych należy określić pewien klucz złożony z samych cyfr. Następnie należy zamienić każdą kolejną literę tekstu jawnego na odpowiadającą mu wartość. Wartość znaku określa się znajdując jego pozycję w tabeli, następnie zapisując koło siebie nagłówek wiersza i nagłówek kolumny koło siebie.
Przykładowo litera "A" ma wartość "0", a litera "B" ma odpowiednik "75".
Po zamianie tekstu jawnego na ciąg cyfr do każdej kolejnej litery dodaje się cyklicznie kolejną cyfrę z klucza. Jeśli wartość wynikowa nie jest cyfrą to należy zostawić jedność, a cyfrę dziesiątek odrzucić. Następnie na podstawie kolejnych cyfr należy odczytać znaki na podstawie tabeli. Należy pamiętać, że jeśli kolejna cyfra jest nagłówkiem, któregoś z wierszy to należy pobrać kolejną cyfrę i znaleźć pole, któremu odpowiada ta wartość.
Przykładowo w celu zamiany 312 na zaszyfrowany tekst to pierwsza cyfra 3 jest w tabelce nagłówkiem wiersza, więc szukamy pola, którego wartość to "31". W tym przypadku to pole z wartością "Y". Do zamiany pozostała wartość 2, więc jest ona wyszukiwana w pierwszym wierszu i jest to "E".
Przypuśćmy, że szyfrowany jest tekst "TEKST" przy pomocy wcześniej utworzonej tabelki i klucza 121.
Znak | T | E | K | S | T | |||
---|---|---|---|---|---|---|---|---|
Cyfry | 3 | 9 | 2 | 3 | 6 | 6 | 3 | 9 |
Klucz | 1 | 2 | 1 | 1 | 2 | 1 | 1 | 2 |
Suma | 4 | 1 | 3 | 4 | 8 | 7 | 4 | 1 |
Wynik | O | I | D | R | J | I |
Ostatecznie szyfrogramem jest "OIDRJI".
Do wczytania klucza posłuży funkcja wczytajKlucz(), która wczyta dziesięc znaków i na tej podstawie określi wielkość tabeli docelowej. Za znak pustej tabeli przyjmuje się znak "#". Wszystkie dane zostaną zapisane do jednowymiarowej tabeli.
(2. - 8.) Wczytaj pierwszy wiersz tabeli i określ ile jest pustych pozycji. (9.) Na podstawie zebranych danych utwórz nową tabelę, aby można było pomieścić wszystkie dane i (11. - 12.) przepisz dotychczasowe dane, a następnie (13.) usuń niepotrzebną tabelę. (14. - 16.) Kolejny krok polega na wczytaniu pozostałych danych.
Do zaszyfrowania danych należy podać trzy argumenty: tabela - tabelę używaną do szyfrowania, klucz - klucz użyty do szyfrowania oraz tekst - tekst jawny do zaszyfrowania.
Pierwsza część kodu polega na zamiania ciągu znaków na ciąg cyfr. Na początek (2.) deklarowna jest tablica do której zostaną zapisane cyfry. W tym przypadku może być ich maksymalnie po dwie do jednej litery. (3.) Zmienna indeks pozwoli śledzić ile cyfr zostało już zapisane w tabeli. (4.) Dla każdego znaku w tekście: (5.) znajdź jego pozycję w tablicy. (6.) Jeśli pozycja nie jest mniejsza od 10 to znaczy, że wiersz ma nagłówek. (7.) Można go znaleźć określając numer wiersza i szukając tego wystąpienia # w tablicy. (8.) Za każdym razem natomiast należy dopisać numer kolumny w której znajduje się sprawdzany znak. Na koniec pierwszej części (10.) dopisywane jest dodatkowe 0.
Kolejny etap polega na (11. - 12.) na przesunięciu każdej wartości o odpowiednią wartość z klucza. Potem na podstawie zebranych danych można (13.) zadeklarować tablice do której zapisany zostanie szyfrogram. (15. - 24.) Dla każdej kolejnej cyfry: (16.) określ czy ma być pobrana z pierwszego wiersza.
W celu znalezienia indeksu pod którym wartosc znajduje się w tablicy data po raz ktory można skorzystać z funkcji npozycja(), której kod został przedstawiony poniżej.
Poniższa funkcja ileoddo() sprawdza ile w tablicy data jest wystąpień wartosc w zakresie [zakres_od, zakres_do].
Przykładowo w celu przetestowania działania napisanych funkcji można skorzystać z poniższej funkcji main():
W celu wywołania przykładu opisanego na początku artykułu należy wpisać kolejno: