- Szyfr Cezara to prosta technika szyfrowania używana przez Juliusza Cezara do wysyłania tajnych wiadomości do swoich sojuszników. Działa poprzez przesuwanie liter w wiadomości w postaci zwykłego tekstu o określoną liczbę pozycji, co nazywa się przesunięciem lub klawiszem.
- Technika szyfru Cezara jest jedną z najwcześniejszych i najprostszych metod techniki szyfrowania. Jest to po prostu rodzaj szyfru podstawieniowego, tzn. każda litera danego tekstu jest zastępowana literą o ustalonej liczbie pozycji w alfabecie. Na przykład przy przesunięciu o 1 A zostanie zastąpione przez B, B stanie się C i tak dalej. Nazwa tej metody najwyraźniej pochodzi od Juliusza Cezara, który najwyraźniej używał jej do komunikowania się ze swoimi urzędnikami.
- Zatem do zaszyfrowania danego tekstu potrzebna jest wartość całkowita, zwana przesunięciem, która wskazuje, o ile pozycji została przesunięta w dół każda litera tekstu.
Szyfrowanie można przedstawić za pomocą arytmetyki modułowej, przekształcając najpierw litery na liczby, zgodnie ze schematem A = 0, B = 1,…, Z = 25. Szyfrowanie litery poprzez przesunięcie n można opisać matematycznie jako. - Na przykład, jeśli przesunięcie wynosi 3, wówczas litera A zostanie zastąpiona literą D, B stanie się E, C stanie się F i tak dalej. Alfabet jest zawinięty w taki sposób, że po Z zaczyna się od A.
- Oto przykład użycia szyfru Cezara do zaszyfrowania wiadomości HELLO z przesunięciem o 3:
- Zapisz wiadomość w postaci zwykłego tekstu: HELLO
- Wybierz wartość przesunięcia. W tym przypadku użyjemy przesunięcia 3.
- Zastąp każdą literę w wiadomości w postaci zwykłego tekstu literą znajdującą się trzy pozycje w prawo w alfabecie.
H staje się K (przesunięcie 3 z H)
E staje się H (przesunięcie o 3 z E)
L staje się O (przesunięcie 3 z L)
co to jest monitor
L staje się O (przesunięcie 3 z L)
O staje się R (przesunięcie 3 z O)
właściwości kwasowe w dbm
4.Zaszyfrowana wiadomość to teraz KHOOR.
- Aby odszyfrować wiadomość, wystarczy przesunąć każdą literę o tę samą liczbę pozycji do tyłu. W tym przypadku przesunąłbyś każdą literę w KHOOR o 3 pozycje wstecz, aby otrzymać oryginalną wiadomość HELLO.
(Faza szyfrowania z przesunięciem n)
(Faza deszyfrowania z przesunięciem n)

Przykłady:
Text : ABCDEFGHIJKLMNOPQRSTUVWXYZ Shift : 23 Cipher : XYZABCDEFGHIJKLMNOPQRSTUVW Text : ATTACKATONCE Shift : 4 Cipher : EXXEGOEXSRGI>
Zalety:
- Dzięki temu jest łatwy do wdrożenia i użytkowania, dzięki czemu nadaje się dla początkujących do nauki szyfrowania.
- Można go fizycznie wdrożyć, na przykład za pomocą zestawu obracających się dysków lub zestawu kart, zwanego kosą, które mogą być przydatne w określonych sytuacjach.
- Wymaga tylko niewielkiego zestawu wstępnie udostępnionych informacji.
- Można go łatwo zmodyfikować, aby utworzyć bezpieczniejszy wariant, na przykład poprzez użycie wielu wartości przesunięcia lub słów kluczowych.
Niedogodności:
- Nie jest zabezpieczony przed nowoczesnymi metodami deszyfrowania.
- Podatny na ataki ze znanym tekstem jawnym, podczas których osoba atakująca ma dostęp zarówno do zaszyfrowanej, jak i niezaszyfrowanej wersji tych samych wiadomości.
- Mała liczba możliwych kluczy oznacza, że atakujący może z łatwością wypróbować wszystkie możliwe klucze, aż znajdzie ten właściwy, co naraża go na atak brute-force.
- Nie nadaje się do szyfrowania długich tekstów, ponieważ łatwo byłoby je złamać.
- Nie nadaje się do bezpiecznej komunikacji, ponieważ łatwo ją złamać.
- Nie zapewnia poufności, integralności i autentyczności wiadomości.
Cechy szyfru Cezara:
- Szyfr podstawieniowy: Szyfr Cezara jest rodzajem szyfru podstawieniowego, w którym każda litera w tekście jawnym jest zastępowana literą znajdującą się o określoną liczbę pozycji w dół alfabetu.
- Stały klucz: Szyfr Cezara wykorzystuje stały klucz, czyli liczbę pozycji, o które przesuwane są litery. Klucz ten jest znany zarówno nadawcy, jak i odbiorcy.
- Szyfrowanie symetryczne: Szyfr Cezara jest techniką szyfrowania symetrycznego, co oznacza, że do szyfrowania i deszyfrowania używany jest ten sam klucz.
- Ograniczona przestrzeń klawiszy: Szyfr Cezara ma bardzo ograniczoną przestrzeń klawiszy wynoszącą tylko 26 możliwych kluczy, ponieważ alfabet angielski ma tylko 26 liter.
- Podatny na ataki brutalną siłą: Szyfr Cezara jest podatny na ataki brutalną siłą, ponieważ istnieje tylko 26 możliwych kluczy do wypróbowania.
- Łatwy do wdrożenia: Szyfr Cezara jest bardzo łatwy do wdrożenia i wymaga jedynie prostych operacji arytmetycznych, co czyni go popularnym wyborem w przypadku prostych zadań szyfrowania.
Zasady szyfru Cezara:
kontrola programu zapisanego w pamięci
- Wybierz liczbę od 1 do 25. To będzie wartość twojego przesunięcia.
- Zapisz w kolejności litery alfabetu, od A do Z.
- Przesuń każdą literę alfabetu o wartość przesunięcia. Na przykład, jeśli wartość przesunięcia wynosi 3, A stanie się D, B stanie się E, C stanie się F i tak dalej.
- Zaszyfruj wiadomość, zastępując każdą literę odpowiednią przesuniętą literą. Na przykład, jeśli wartość przesunięcia wynosi 3, słowo hello zmieni się na khoor.
- Aby odszyfrować wiadomość, po prostu odwróć proces, przesuwając każdą literę do tyłu o tę samą wartość. Na przykład, jeśli wartość przesunięcia wynosi 3, zaszyfrowana wiadomość khoor stanie się hello.
Algorytm szyfru Cezara:
Wejście:
różnica między obiadem a kolacją
- Wybierz wartość przesunięcia od 1 do 25.
- Zapisz alfabet w kolejności od A do Z.
- Utwórz nowy alfabet, przesuwając każdą literę oryginalnego alfabetu o wartość przesunięcia. Na przykład, jeśli wartość przesunięcia wynosi 3, nowy alfabet będzie wyglądał następująco:
- 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
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 - Zastąp każdą literę wiadomości odpowiednią literą nowego alfabetu. Na przykład, jeśli wartość przesunięcia wynosi 3, słowo hello zmieni się na khoor.
- Aby odszyfrować wiadomość, przesuń każdą literę o tę samą ilość do tyłu. Na przykład, jeśli wartość przesunięcia wynosi 3, zaszyfrowana wiadomość khoor stanie się hello.
Procedura:
- Przemierzaj podany tekst znak po znaku.
- Dla każdego znaku przekształć podany znak zgodnie z regułą, w zależności od tego, czy szyfrujemy, czy deszyfrujemy tekst.
- Zwróć nowy wygenerowany ciąg.
Program, który odbiera wartość Text (string) i wartość Shift (liczba całkowita) i zwraca zaszyfrowany tekst.
C++
// A C++ program to illustrate Caesar Cipher Technique> #include> using> namespace> std;> // This function receives text and shift and> // returns the encrypted text> string encrypt(string text,>int> s)> {> >string result =>''>;> >// traverse text> >for> (>int> i = 0; i // apply transformation to each character // Encrypt Uppercase letters if (isupper(text[i])) result += char(int(text[i] + s - 65) % 26 + 65); // Encrypt Lowercase letters else result += char(int(text[i] + s - 97) % 26 + 97); } // Return the resulting string return result; } // Driver program to test the above function int main() { string text = 'ATTACKATONCE'; int s = 4; cout << 'Text : ' << text; cout << '
Shift: ' << s; cout << '
Cipher: ' << encrypt(text, s); return 0; }> |
>
>
Jawa
//A Java Program to illustrate Caesar Cipher Technique> class> CaesarCipher> {> >// Encrypts text using a shift of s> >public> static> StringBuffer encrypt(String text,>int> s)> >{> >StringBuffer result=>new> StringBuffer();> >for> (>int> i=>0>; i { if (Character.isUpperCase(text.charAt(i))) { char ch = (char)(((int)text.charAt(i) + s - 65) % 26 + 65); result.append(ch); } else { char ch = (char)(((int)text.charAt(i) + s - 97) % 26 + 97); result.append(ch); } } return result; } // Driver code public static void main(String[] args) { String text = 'ATTACKATONCE'; int s = 4; System.out.println('Text : ' + text); System.out.println('Shift : ' + s); System.out.println('Cipher: ' + encrypt(text, s)); } }> |
>
>
Python3
#A python program to illustrate Caesar Cipher Technique> def> encrypt(text,s):> >result>=> ''> ># traverse text> >for> i>in> range>(>len>(text)):> >char>=> text[i]> ># Encrypt uppercase characters> >if> (char.isupper()):> >result>+>=> chr>((>ord>(char)>+> s>->65>)>%> 26> +> 65>)> ># Encrypt lowercase characters> >else>:> >result>+>=> chr>((>ord>(char)>+> s>-> 97>)>%> 26> +> 97>)> >return> result> #check the above function> text>=> 'ATTACKATONCE'> s>=> 4> print> (>'Text : '> +> text)> print> (>'Shift : '> +> str>(s))> print> (>'Cipher: '> +> encrypt(text,s))> |
>
>
C#
// A C# Program to illustrate Caesar Cipher Technique> using> System;> using> System.Text;> public> class> CaesarCipher> {> >// Encrypts text using a shift on s> >public> static> StringBuilder encrypt(String text,>int> s)> >{> >StringBuilder result=>new> StringBuilder();> >for> (>int> i=0; i { if (char.IsUpper(text[i])) { char ch = (char)(((int)text[i] + s - 65) % 26 + 65); result.Append(ch); } else { char ch = (char)(((int)text[i] + s - 97) % 26 + 97); result.Append(ch); } } return result; } // Driver code public static void Main(String[] args) { String text = 'ATTACKATONCE'; int s = 4; Console.WriteLine('Text : ' + text); Console.WriteLine('Shift : ' + s); Console.WriteLine('Cipher: ' + encrypt(text, s)); } } /* This code contributed by PrinciRaj1992 */> |
>
>
PHP
// A PHP program to illustrate Caesar // Cipher Technique // This function receives text and shift // and returns the encrypted text function encrypt($text, $s) { $result = ''; // traverse text for ($i = 0; $i |
>
>
JavaScript
> //A Javascript Program to illustrate Caesar Cipher Technique> > >// Encrypts text using a shift on s> >function> encrypt(text, s)> >{> >let result=>''> >for> (let i = 0; i { let char = text[i]; if (char.toUpperCase(text[i])) { let ch = String.fromCharCode((char.charCodeAt(0) + s-65) % 26 + 65); result += ch; } else { let ch = String.fromCharCode((char.charCodeAt(0) + s-97) % 26 + 97); result += ch; } } return result; } // Driver code let text = 'ATTACKATONCE'; let s = 4; document.write('Text : ' + text + ' '); document.write('Shift : ' + s + ' '); document.write('Cipher: ' + encrypt(text, s) + ' '); // This code is contributed by avanitrachhadiya2155> |
>
>
Wyjście
Text : ATTACKATONCE Shift: 4 Cipher: EXXEGOEXSRGI>
Złożoność czasowa: O(N) gdzie N jest długością podanego tekstu
Przestrzeń pomocnicza: NA)
Jak odszyfrować?
Możemy albo napisać inną funkcję odszyfrowującą, podobną do szyfrowania, która zastosuje dane przesunięcie w przeciwnym kierunku, aby odszyfrować oryginalny tekst. Możemy jednak użyć cyklicznej właściwości szyfru pod modulo, stąd możemy po prostu obserwować
Cipher(n) = De-cipher(26-n)>
Dlatego możemy użyć tej samej funkcji do odszyfrowania, zamiast tego zmodyfikujemy wartość przesunięcia w taki sposób, że przesunięcie = 26-shift (więcej informacji znajdziesz w tym przypadku, jeśli chodzi o przykładowe uruchomienie w C++).