logo

Szyfr Cezara w kryptografii

  • 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:
  1. Zapisz wiadomość w postaci zwykłego tekstu: HELLO
  2. Wybierz wartość przesunięcia. W tym przypadku użyjemy przesunięcia 3.
  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.


E_n(x)=(x+n)mod 26
(Faza szyfrowania z przesunięciem n)

D_n(x)=(x-n)mod 26
(Faza deszyfrowania z przesunięciem n)



Szyfr Cezara 3

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:

  1. 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.
  2. 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.
  3. Szyfrowanie symetryczne: Szyfr Cezara jest techniką szyfrowania symetrycznego, co oznacza, że ​​do szyfrowania i deszyfrowania używany jest ten sam klucz.
  4. Ograniczona przestrzeń klawiszy: Szyfr Cezara ma bardzo ograniczoną przestrzeń klawiszy wynoszącą tylko 26 możliwych kluczy, ponieważ alfabet angielski ma tylko 26 liter.
  5. Podatny na ataki brutalną siłą: Szyfr Cezara jest podatny na ataki brutalną siłą, ponieważ istnieje tylko 26 możliwych kluczy do wypróbowania.
  6. Ł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
  1. Wybierz liczbę od 1 do 25. To będzie wartość twojego przesunięcia.
  2. Zapisz w kolejności litery alfabetu, od A do Z.
  3. 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.
  4. 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.
  5. 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ą
  1. Wybierz wartość przesunięcia od 1 do 25.
  2. Zapisz alfabet w kolejności od A do Z.
  3. 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:
  4. 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
  5. 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.
  6. 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++).