- Caesarova šifra je jednoduchá šifrovacia technika, ktorú používal Julius Caesar na posielanie tajných správ svojim spojencom. Funguje tak, že písmená v textovej správe sa posúvajú o určitý počet pozícií, ktoré sa nazývajú shift alebo kláves.
- Technika Caesarovej šifry je jednou z prvých a najjednoduchších metód šifrovacej techniky. Je to jednoducho typ substitučnej šifry, t.j. každé písmeno daného textu je nahradené písmenom s pevným počtom pozícií nižšie v abecede. Napríklad s posunom o 1 by sa A nahradilo B, B by sa stalo C atď. Metóda je zrejme pomenovaná po Juliusovi Caesarovi, ktorý ju zrejme používal na komunikáciu so svojimi úradníkmi.
- Na zašifrovanie daného textu teda potrebujeme celočíselnú hodnotu, známu ako posun, ktorý označuje počet pozícií, o ktoré sa každé písmeno textu posunulo nadol.
Šifrovanie možno znázorniť pomocou modulárnej aritmetiky tak, že sa písmená najprv prevedú na čísla podľa schémy A = 0, B = 1,…, Z = 25. Šifrovanie písmena pomocou posunu n možno matematicky opísať ako. - Napríklad, ak je posun 3, potom písmeno A by bolo nahradené písmenom D, B by bolo E, C by bolo F atď. Abeceda je zabalená tak, že po Z začína späť na A.
- Tu je príklad, ako použiť Caesarovu šifru na zašifrovanie správy HELLO s posunom o 3:
- Napíšte textovú správu: AHOJ
- Vyberte hodnotu posunu. V tomto prípade použijeme posun o 3.
- Nahraďte každé písmeno v textovej správe písmenom, ktoré je v abecede o tri pozície vpravo.
H sa zmení na K (posun 3 z H)
E sa zmení na H (posun 3 z E)
L sa zmení na O (posun 3 z L)
binárny strom prechodu zásielkového obchodu
L sa zmení na O (posun 3 z L)
O sa zmení na R (posun 3 z O)
hovno
4. Šifrovaná správa je teraz KHOOR.
- Na dešifrovanie správy stačí posunúť každé písmeno späť o rovnaký počet pozícií. V tomto prípade by ste posunuli každé písmeno v KHOOR späť o 3 pozície, aby ste získali pôvodnú správu, HELLO.
(Fáza šifrovania s posunom n)
(Fáza dešifrovania s posunom n)

Príklady:
Text : ABCDEFGHIJKLMNOPQRSTUVWXYZ Shift : 23 Cipher : XYZABCDEFGHIJKLMNOPQRSTUVW Text : ATTACKATONCE Shift : 4 Cipher : EXXEGOEXSRGI>
Výhody:
- Ľahko sa implementuje a používa, takže je vhodný pre začiatočníkov, aby sa dozvedeli o šifrovaní.
- Dá sa fyzicky implementovať, napríklad pomocou sady rotujúcich diskov alebo sady kariet, známych ako scytale, čo môže byť v určitých situáciách užitočné.
- Vyžaduje len malý súbor vopred zdieľaných informácií.
- Dá sa ľahko upraviť na vytvorenie bezpečnejšieho variantu, napríklad použitím viacerých hodnôt posunu alebo kľúčových slov.
Nevýhody:
- Nie je bezpečný proti moderným metódam dešifrovania.
- Zraniteľné voči útokom so známym otvoreným textom, pri ktorých má útočník prístup k zašifrovaným aj nezašifrovaným verziám tých istých správ.
- Malý počet možných kľúčov znamená, že útočník môže ľahko vyskúšať všetky možné kľúče, kým nenájde ten správny, čo ho robí zraniteľným voči útoku hrubou silou.
- Nie je vhodný na šifrovanie dlhého textu, pretože by sa dal ľahko prelomiť.
- Nie je vhodný na bezpečnú komunikáciu, pretože sa ľahko rozbije.
- Neposkytuje dôvernosť, integritu a autentickosť správy.
Vlastnosti cézarovej šifry:
- Substitučná šifra: Caesarova šifra je typom substitučnej šifry, kde každé písmeno v otvorenom texte je nahradené písmenom o určitý pevný počet pozícií nižšie v abecede.
- Pevný kľúč: Caesarova šifra používa pevný kľúč, čo je počet pozícií, o ktoré sú písmená posunuté. Tento kľúč je známy odosielateľovi aj príjemcovi.
- Symetrické šifrovanie: Caesarova šifra je symetrická šifrovacia technika, čo znamená, že na šifrovanie aj dešifrovanie sa používa rovnaký kľúč.
- Obmedzený kľúčový priestor: Caesarova šifra má veľmi obmedzený kľúčový priestor iba 26 možných kľúčov, keďže v anglickej abecede je len 26 písmen.
- Zraniteľná voči útokom hrubou silou: Caesarova šifra je zraniteľná voči útokom hrubou silou, pretože existuje len 26 možných kľúčov, ktoré môžete vyskúšať.
- Jednoduchá implementácia: Caesarova šifra sa veľmi ľahko implementuje a vyžaduje len jednoduché aritmetické operácie, vďaka čomu je obľúbenou voľbou pre jednoduché šifrovacie úlohy.
Pravidlá pre Caesarovu šifru:
vytlačiť vzor hviezdy
- Vyberte číslo medzi 1 a 25. Toto bude vaša hodnota posunu.
- Zapíšte si písmená abecedy v poradí od A po Z.
- Posuňte každé písmeno abecedy o hodnotu posunu. Napríklad, ak je hodnota posunu 3, A sa zmení na D, B sa zmení na E, C sa zmení na F atď.
- Zašifrujte svoju správu nahradením každého písmena zodpovedajúcim posunutým písmenom. Napríklad, ak je hodnota posunu 3, slovo ahoj sa zmení na khoor.
- Ak chcete správu dešifrovať, jednoducho zmeňte proces posunutím každého písmena späť o rovnakú hodnotu. Napríklad, ak je hodnota posunu 3, zašifrovaná správa khoor sa zmení na ahoj.
Algoritmus pre Caesarovu šifru:
Vstup:
čo je objekt java
- Vyberte hodnotu posunu medzi 1 a 25.
- Napíšte abecedu v poradí od A po Z.
- Vytvorte novú abecedu posunutím každého písmena pôvodnej abecedy o hodnotu posunu. Napríklad, ak je hodnota posunu 3, nová abeceda bude:
- 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 - Nahraďte každé písmeno správy zodpovedajúcim písmenom z novej abecedy. Napríklad, ak je hodnota posunu 3, slovo ahoj sa zmení na khoor.
- Ak chcete správu dešifrovať, posuňte každé písmeno späť o rovnakú hodnotu. Napríklad, ak je hodnota posunu 3, zašifrovaná správa khoor sa zmení na ahoj.
Postup:
- Prechádzajte daným textom po jednom znaku.
- Pre každý znak transformujte daný znak podľa pravidla v závislosti od toho, či text šifrujeme alebo dešifrujeme.
- Vráti nový vygenerovaný reťazec.
Program, ktorý prijme text (reťazec) a hodnotu Shift (celé číslo) a vráti zašifrovaný text.
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; }> |
>
>
Java
//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> |
>
>
Výkon
Text : ATTACKATONCE Shift: 4 Cipher: EXXEGOEXSRGI>
Časová zložitosť: O(N) kde N je dĺžka daného textu
Pomocný priestor: O(N)
Ako dešifrovať?
Môžeme napísať inú funkciu dešifrovať podobnú šifrovaniu, ktorá použije daný posun v opačnom smere na dešifrovanie pôvodného textu. Môžeme však použiť cyklickú vlastnosť šifry pod modulo, takže môžeme jednoducho pozorovať
Cipher(n) = De-cipher(26-n)>
Na dešifrovanie teda môžeme použiť rovnakú funkciu, namiesto toho upravíme hodnotu posunu tak, že shift = 26-shift (pozrite si ukážku spustenia v C++).