- Caesarova šifra je jednoduchá šifrovací technika, kterou používal Julius Caesar k zasílání tajných zpráv svým spojencům. Funguje to tak, že se písmena ve zprávě v otevřeném textu posouvají o určitý počet pozic, známý jako shift nebo klíč.
- Technika Caesarovy šifry je jednou z nejstarších a nejjednodušších metod šifrovací techniky. Je to prostě typ substituční šifry, tj. každé písmeno daného textu je nahrazeno písmenem s pevným počtem pozic v abecedě. Například s posunem o 1 by bylo A nahrazeno B, B by se stalo C atd. Metoda je zřejmě pojmenována po Juliu Caesarovi, který ji zřejmě používal ke komunikaci se svými úředníky.
- K zašifrování daného textu tedy potřebujeme celočíselnou hodnotu, známou jako posun, který udává počet pozic, o které bylo každé písmeno textu posunuto dolů.
Šifrování lze znázornit pomocí modulární aritmetiky tak, že se písmena nejprve převedou na čísla podle schématu A = 0, B = 1,…, Z = 25. Šifrování písmene pomocí posunu n lze matematicky popsat jako. - Pokud je například směna 3, písmeno A by bylo nahrazeno písmenem D, B by se stalo E, C by bylo F a tak dále. Abeceda je zabalena tak, že po Z začíná zpět na A.
- Zde je příklad, jak pomocí Caesarovy šifry zašifrovat zprávu HELLO s posunem o 3:
- Zapište si textovou zprávu: AHOJ
- Vyberte hodnotu posunu. V tomto případě použijeme posun o 3.
- Nahraďte každé písmeno ve zprávě v prostém textu písmenem, které je v abecedě o tři pozice vpravo.
H se změní na K (posun 3 z H)
E se změní na H (posun 3 z E)
L se změní na O (posun 3 z L)
přednost java operátoru
L se změní na O (posun 3 z L)
O se změní na R (posun 3 z O)
4. Šifrovaná zpráva je nyní KHOOR.
concat java řetězec
- Pro dešifrování zprávy stačí posunout každé písmeno zpět o stejný počet pozic. V tomto případě byste posunuli každé písmeno v KHOOR zpět o 3 pozice, abyste získali původní zprávu, HELLO.
(Fáze šifrování s posunem n)
(Fáze dešifrování s posunem n)

Příklady:
síť a internet
Text : ABCDEFGHIJKLMNOPQRSTUVWXYZ Shift : 23 Cipher : XYZABCDEFGHIJKLMNOPQRSTUVW Text : ATTACKATONCE Shift : 4 Cipher : EXXEGOEXSRGI>
výhody:
- Snadno se implementuje a používá, takže je vhodné pro začátečníky, aby se dozvěděli o šifrování.
- Může být fyzicky implementován, například pomocí sady rotujících disků nebo sady karet, známých jako scytale, což může být užitečné v určitých situacích.
- Vyžaduje pouze malou sadu předem sdílených informací.
- Lze snadno upravit a vytvořit bezpečnější variantu, například pomocí více hodnot směny nebo klíčových slov.
Nevýhody:
- Není bezpečný proti moderním metodám dešifrování.
- Je zranitelný vůči útokům se známým prostým textem, kdy má útočník přístup k šifrovaným i nešifrovaným verzím stejných zpráv.
- Malý počet možných klíčů znamená, že útočník může snadno vyzkoušet všechny možné klíče, dokud nenajde ten správný, což ho činí zranitelným vůči útoku hrubou silou.
- Není vhodný pro šifrování dlouhého textu, protože by bylo snadné jej prolomit.
- Není vhodný pro bezpečnou komunikaci, protože se snadno rozbije.
- Neposkytuje důvěrnost, integritu a autentičnost zprávy.
Vlastnosti caesarovy šifry:
- Substituční šifra: Caesarova šifra je typ substituční šifry, kde každé písmeno v otevřeném textu je nahrazeno písmenem o určitý pevný počet pozic v abecedě.
- Pevný klíč: Caesarova šifra používá pevný klíč, což je počet pozic, o které jsou písmena posunuta. Tento klíč zná odesílatel i příjemce.
- Symetrické šifrování: Caesarova šifra je technika symetrického šifrování, což znamená, že pro šifrování i dešifrování se používá stejný klíč.
- Omezený klíčový prostor: Caesarova šifra má velmi omezený klíčový prostor pouze 26 možných klíčů, protože v anglické abecedě je pouze 26 písmen.
- Zranitelný vůči útokům hrubou silou: Caesarova šifra je zranitelná vůči útokům hrubou silou, protože existuje pouze 26 možných klíčů k vyzkoušení.
- Snadná implementace: Caesarova šifra se velmi snadno implementuje a vyžaduje pouze jednoduché aritmetické operace, díky čemuž je oblíbenou volbou pro jednoduché šifrovací úlohy.
Pravidla pro Caesarovu šifru:
- Vyberte číslo mezi 1 a 25. Toto bude hodnota vašeho posunu.
- Zapište si písmena abecedy v pořadí od A do Z.
- Posuňte každé písmeno abecedy o hodnotu posunu. Pokud je například hodnota posunu 3, z A se stane D, z B se stane E, C se změní na F a tak dále.
- Zašifrujte svou zprávu nahrazením každého písmena odpovídajícím posunutým písmenem. Pokud je například hodnota posunu 3, slovo ahoj se změní na khoor.
- Chcete-li zprávu dešifrovat, jednoduše proces změňte tak, že každé písmeno posunete zpět o stejnou hodnotu. Pokud je například hodnota posunu 3, zašifrovaná zpráva khoor se změní na ahoj.
Algoritmus pro Caesar Cipher:
Vstup:
- Vyberte hodnotu posunu mezi 1 a 25.
- Napište abecedu v pořadí od A do Z.
- Vytvořte novou abecedu posunutím každého písmena původní abecedy o hodnotu posunu. Pokud je například 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 zprávy odpovídajícím písmenem z nové abecedy. Pokud je například hodnota posunu 3, slovo ahoj se změní na khoor.
- Chcete-li zprávu dešifrovat, posuňte každé písmeno zpět o stejnou hodnotu. Pokud je například hodnota posunu 3, zašifrovaná zpráva khoor se změní na ahoj.
Postup:
výběr z více tabulek sql
- Procházejte daný text jeden znak po druhém.
- Pro každý znak transformujte daný znak podle pravidla v závislosti na tom, zda text šifrujeme nebo dešifrujeme.
- Vraťte nově vygenerovaný řetězec.
Program, který přijímá text (řetězec) a hodnotu Shift (celé číslo) a vrací 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; }> |
>
>
Jáva
//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ýstup
Text : ATTACKATONCE Shift: 4 Cipher: EXXEGOEXSRGI>
Časová složitost: O(N) kde N je délka daného textu
Pomocný prostor: NA)
Jak dešifrovat?
Můžeme buď napsat jinou funkci dešifrování podobnou šifrování, která použije daný posun v opačném směru k dešifrování původního textu. Můžeme však použít cyklickou vlastnost šifry pod modulo, takže můžeme jednoduše pozorovat
Cipher(n) = De-cipher(26-n)>
Můžeme tedy použít stejnou funkci k dešifrování, místo toho upravíme hodnotu posunu tak, že shift = 26-shift (viz ukázkový běh v C++).