Szyfr Beaufort jest to szyfr podstawieniowy, który częściowo przypomina szyfrowanie Vigenère. Różnica tkwi jednak w sposobie wyboru znaku do szyfrogramu na podstawie znaku tekstu oraz znaku klucza.
Szyfr Beauforta przyjmuje dwie dane: jedną z nich jest klucz, który będzie użyty do szyfrowania oraz tekst czyli informacje, które będziemy szyfrować. Podobnie jak w przypadku szyfr Vigenère do szyfrowania należy posłużyć się następującą tabelką:
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 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A | 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 |
B | 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 | A |
C | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B |
D | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C |
E | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D |
F | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E |
G | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F |
H | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G |
I | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H |
J | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I |
K | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J |
L | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K |
M | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L |
N | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M |
O | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N |
P | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
Q | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P |
R | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q |
S | S | 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 |
T | 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 |
U | 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 | T |
V | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U |
W | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V |
X | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W |
Y | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X |
Z | Z | 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 |
Jednak w tym szyfrze najpierw szukamy kolumny o nagłówku, którym jest kolejna litera z klucza (te litery wybieramy cyklicznie), a potem szukamy w tej kolumnie szyfrowany znak. Znak ten zostanie zastąpiony przez znak, który znajdzie się w tym samym wierszu co pozycja znalezionego znaku. Takie szyfrowanie jest powtarzane dla każdego znaku.
W celu odszyfrowania danych to wystarczy je ponownie zaszyfrować przy pomocy tego samego klucza, ale podając za tekst jawny szyfrogram do rozszyfrowania.
Spróbujmy teraz zaszyfrować wyrażenie "TAJNAINFORMACJA" przy pomocy klucza "HASLO". Kolejne litery będą szyfrowane następująco:
Tekst | T | A | J | N | A | I | N | F | O | R | M | A | C | J | A |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Klucz | H | A | S | L | O | H | A | S | L | O | H | A | S | L | O |
Szyfrogram | O | A | J | Y | O | Z | N | N | X | X | V | A | Q | C | O |
Ostatecznie szyfrogram to "OAJYOZNNXXVAQCO".
Ze względu na fakt, że do zaszyfrowani i rozszyfrowania jest potrzebny ten sam algorytm to zostanie napisana tylko jedna funkcja zmien(), która będzie przyjmować dwa argumenty. Jednym z nich będzie tekst - dane do za- lub rozszyfrowania oraz klucz - wyrażenie zmieniające podany tekst.
Na początek (2.) deklarujemy zmienną w do której będą dopisywane kolejne zaszyfrowane znaki. Potem (3.) dla każdego znaku: (4.) wyliczana jest kolumna oraz (5.) pozycję szukanego elementu w kolumnie w alfabecie. Następnie (6.) przy pomocy wzoru wyliczamy zaszyfrowany znak. Na koniec (8.) zwracamy wynik w.
Poniższy fragment kodu wczyta od użytkownika klucz, a potem tekst jawny, a potem wyświetli na ekran szyfrogram.
Napisz funkcje zmien(), który będzie implementował funkcjonalność szyfru Beaufort. Tym razem użytkownik ma dostać więcej swobody i tekst nie będzie składać się jedynie z wielkich liter. Program ma pomijać wszystkie znaki nie będące wielkimi literami, ale pominięcie znaku nie oznacza pominięcie klucza. Tekst ma dalej być zaszyfrowany jakby się składał tylko z wielkich liter.
Napisz funkcje zmien(), który będzie implementował funkcjonalność szyfru Beaufort. Tym razem użytkownik ma dostać więcej swobody i tekst nie będzie składać się jedynie z wielkich liter. Program ma pomijać wszystkie znaki nie będące wielkimi literami, ale pominięcie znaku nie oznacza pominięcie klucza. Tekst ma dalej być zaszyfrowany jakby się składał tylko z wielkich liter.
Przykładowo szyfrując wyrażenie "TAJNA INFORMACJA." otrzymamy: