Chaoszyfr został wymyślony w 1918 roku przez John Francis Byrne. Swój szyfr uważał za prosty, ale bardzo trudny do złamania. Nawet oferował nagrodę temu kto odkryłby jak działa jego metoda szyfrowania. Do szyfrowania tekstu jawnego stosowane są dwa alfabety złożone z tych samych znaków, ale mogą posiadać znaki w dowolnej kolejności, niekoniecznie tej samej. To pozwala na szyfrowanie wiadomości sprawia, że utrudnione są ataki poprzez analizę tekstu.
Do zaszyfrowania tekstu należy przygotować tekst jawny do zaszyfrowania oraz dwa alfabety: tekstu jawnego oraz szyfrowanego. Alfabety mogą być złożone z dowolnych znaków, ale obydwa muszą zawierać znaki drugiego. Przypuśćmy, że będziemy szyfrować tekst "SZYFR" alfabetem łacińskim "ABCDEFGHIJKLMNOPQRSTUVWXYZ" dla jawnego oraz "ZYXWVUTSRQPONMLKJIHGFEDCBA" dla szyfrowanego.
Dla każdego znaku tekstu znajdujemy jego pozycję w alfabecie tekstu jawnego, a potem odczytujemy znak z tej samej pozycji w alfabecie szyfrowanym. Przykładowo dla pierwszego znaku wiadomości "S" odpowiada litera "H".
Alfabet jawny | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Alfabet szyfru | Z | Y | X | W | V | U | T | S | R | Q | P | O | N | M | L | K | J | I | H | G | F | E | D | C | B | A |
Teraz należy przesunąć alfabet jawny o znalezioną pozycję + 1, a szyfrowany tylko o pozychę. Znaki, które wyjdą poza lewą stronę cyklicznie przenosimy na koniec alfabetu. Końcowy efekt powinien być taki, że szyfrowany znak jest na końcu swojego alfabetu i jej odpowiednik znajdzie się na początku.
Alfabet jawny | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Alfabet szyfru | H | G | F | E | D | C | B | A | Z | Y | X | W | V | U | T | S | R | Q | P | O | N | M | L | K | J | I |
Dla tekstu jawnego i szyfrowanego należy przenieść 2 znak w alfabecie na środek alfabetu.
Alfabet jawny | T | U | W | X | Y | Z | A | B | C | D | E | F | G | V | H | I | J | K | L | M | N | O | P | Q | R | S |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Alfabet szyfru | H | F | E | D | C | B | A | Z | Y | X | W | V | U | G | T | S | R | Q | P | O | N | M | L | K | J | I |
Zmodyfikowana postać alfabetów zostaną teraz użyte do zaszyfrowania kolejnego znaku alfabetu. Końcowy szyfrogram to HBDXM.
Deszyfrowanie tekstu ma dokładnie takie same kroki jak szyfrowanie, ale zamiast zamieniać tekst alfabetu jawnego na szyfrowany to wybieramy znaki odwrotnie. Przykładowo w pierwszym kroku szukamy litery "H" a alfabecie szyfrowanym, a następnie zapisujemy jej odpowiednik czyli "S". Kręcenie alfabetami pozostaje bez zmian.
W celu przekonania się do czego prowadzi kręcenie kółkami warto przeanalizować szyfrowanie tekstu "ABC" dwoma, identycznymi alfabetami "ABCDEFGHIJKLMNOPQRSTUVWXYZ". Okazuje się, że szyfrogram takiego tekstu to "AAA", mimo że tekst wejściowy zawiera trzy różne znaki!
Przyjmujemy, że alfabet będziemy przechowywać w postaci łańcuchów znaków. W ten sposób wystarczą operację wybierania odpowiednich fragmentów tekstów oraz ich łączenia. Oto przykładowa funkcja KrecKola, która przyjmuje trzy argumenty: obydwa alfabety oraz pozycję na której znajduje się szyfrowany znak.
Szyfrowanie polega na przygotowaniu pustego łańcucha tekstu i przeprowadzenia szyfrowania każdego znaku po kolei. Jak wiadomo w tekście mogą wystąpić znaki spoza alfabetu. W takim przypadku funkcja po prostu je dopisze do szyfrogramu bez zmian. Na koniec zwracany jest szyfrogram.
Kod napisany do rozszyfrowania szyfrogramu ma identyczną strukturą, ale różni się w którym alfabecie jest wyszukiwany deszyfrowany znak. Reszta kodu pozostaje bez zmian.
Kod zawiera funkcję do uruchomienia. Użytkownik zostanie poproszony o wprowadzenie tekstu jawnego oraz dwóch alfabetów. Wypisany zostanie szyfrogram, a następnie rozszyfrowany znak.