- Het Caesarcijfer is een eenvoudige encryptietechniek die door Julius Caesar werd gebruikt om geheime berichten naar zijn bondgenoten te sturen. Het werkt door de letters in het leesbare tekstbericht met een bepaald aantal posities te verschuiven, ook wel de shift of sleutel genoemd.
- De Caesar Cipher-techniek is een van de vroegste en eenvoudigste coderingsmethoden. Het is eenvoudigweg een soort vervangingscijfer, dat wil zeggen dat elke letter van een bepaalde tekst wordt vervangen door een letter met een vast aantal posities lager in het alfabet. Met een verschuiving van 1 zou A bijvoorbeeld worden vervangen door B, B zou C worden, enzovoort. De methode is blijkbaar vernoemd naar Julius Caesar, die deze blijkbaar gebruikte om met zijn functionarissen te communiceren.
- Om een bepaalde tekst te coderen hebben we dus een geheel getal nodig, bekend als een verschuiving, die het aantal posities aangeeft waarin elke letter van de tekst naar beneden is verplaatst.
De codering kan worden weergegeven met behulp van modulaire rekenkunde door eerst de letters in cijfers te transformeren, volgens het schema A = 0, B = 1, ..., Z = 25. De codering van een letter door een verschuiving n kan wiskundig worden beschreven als. - Als de verschuiving bijvoorbeeld 3 is, wordt de letter A vervangen door de letter D, wordt B E, wordt C F, enzovoort. Het alfabet is zo omwikkeld dat het na Z weer bij A begint.
- Hier is een voorbeeld van hoe je het Caesar-cijfer kunt gebruiken om het bericht HELLO te coderen met een verschuiving van 3:
- Schrijf het bericht in platte tekst op: HALLO
- Kies een verschuivingswaarde. In dit geval gebruiken we een shift van 3.
- Vervang elke letter in het leesbare tekstbericht door de letter die drie posities rechts in het alfabet staat.
H wordt K (verschuiving 3 van H)
E wordt H (shift 3 van E)
L wordt O (verschuiving 3 van L)
10 van 50
L wordt O (verschuiving 3 van L)
O wordt R (verschuiving 3 van O)
Java-waarde van tekenreeks
4.Het gecodeerde bericht is nu KHOOR.
- Om het bericht te ontsleutelen, hoeft u alleen maar elke letter evenveel posities terug te schuiven. In dit geval zou je elke letter in KHOOR 3 posities terugschuiven om het originele bericht, HALLO, te krijgen.
(Encryptiefase met shift n)
(Decryptiefase met shift n)

Voorbeelden:
Text : ABCDEFGHIJKLMNOPQRSTUVWXYZ Shift : 23 Cipher : XYZABCDEFGHIJKLMNOPQRSTUVW Text : ATTACKATONCE Shift : 4 Cipher : EXXEGOEXSRGI>
Voordelen:
- Gemakkelijk te implementeren en te gebruiken, waardoor het geschikt is voor beginners om meer te leren over encryptie.
- Kan fysiek worden geïmplementeerd, zoals met een set roterende schijven of een set kaarten, ook wel een scytale genoemd, wat in bepaalde situaties handig kan zijn.
- Vereist slechts een kleine set vooraf gedeelde informatie.
- Kan eenvoudig worden aangepast om een veiligere variant te creëren, bijvoorbeeld door meerdere ploegwaarden of trefwoorden te gebruiken.
Nadelen:
- Het is niet beveiligd tegen moderne decoderingsmethoden.
- Kwetsbaar voor aanvallen met bekende platte tekst, waarbij een aanvaller toegang heeft tot zowel de gecodeerde als de niet-gecodeerde versies van dezelfde berichten.
- Het kleine aantal mogelijke sleutels betekent dat een aanvaller gemakkelijk alle mogelijke sleutels kan proberen totdat de juiste is gevonden, waardoor deze kwetsbaar wordt voor een brute force-aanval.
- Het is niet geschikt voor het versleutelen van lange tekst, omdat het gemakkelijk te kraken is.
- Het is niet geschikt voor veilige communicatie, omdat het gemakkelijk kan worden verbroken.
- Biedt geen vertrouwelijkheid, integriteit en authenticiteit in een bericht.
Kenmerken van caesarcijfer:
- Vervangingscijfer: Het Caesarcijfer is een type vervangingscijfer, waarbij elke letter in de leesbare tekst wordt vervangen door een letter op een vast aantal posities lager in het alfabet.
- Vaste sleutel: Het Caesar-cijfer gebruikt een vaste sleutel, dit is het aantal posities waarmee de letters worden verschoven. Deze sleutel is bekend bij zowel de zender als de ontvanger.
- Symmetrische codering: Het Caesar-cijfer is een symmetrische coderingstechniek, wat betekent dat dezelfde sleutel wordt gebruikt voor zowel codering als decodering.
- Beperkte sleutelruimte: Het Caesar-cijfer heeft een zeer beperkte sleutelruimte van slechts 26 mogelijke sleutels, aangezien er slechts 26 letters in het Engelse alfabet zijn.
- Kwetsbaar voor brute force-aanvallen: Het Caesar-cijfer is kwetsbaar voor brute force-aanvallen, omdat er slechts 26 mogelijke sleutels zijn om te proberen.
- Eenvoudig te implementeren: Het Caesar-cijfer is zeer eenvoudig te implementeren en vereist slechts eenvoudige rekenkundige bewerkingen, waardoor het een populaire keuze is voor eenvoudige coderingstaken.
Regels voor het Caesarcijfer:
multiplexen
- Kies een getal tussen 1 en 25. Dit wordt je ploegwaarde.
- Schrijf de letters van het alfabet in volgorde op, van A tot Z.
- Verschuif elke letter van het alfabet met de verschuivingswaarde. Als de verschuivingswaarde bijvoorbeeld 3 is, wordt A D, B wordt E, C wordt F, enzovoort.
- Versleutel uw bericht door elke letter te vervangen door de overeenkomstige verschoven letter. Als de verschuivingswaarde bijvoorbeeld 3 is, wordt het woord hallo khoor.
- Om het bericht te ontsleutelen, draait u het proces eenvoudigweg om door elke letter evenveel terug te schuiven. Als de verschuivingswaarde bijvoorbeeld 3 is, wordt het gecodeerde bericht khoor hallo.
Algoritme voor Caesar-cijfer:
Invoer:
zo nigam
- Kies een verschuivingswaarde tussen 1 en 25.
- Schrijf het alfabet op, van A tot Z.
- Maak een nieuw alfabet door elke letter van het originele alfabet met de verschuivingswaarde te verschuiven. Als de verschuivingswaarde bijvoorbeeld 3 is, zou het nieuwe alfabet er als volgt uitzien:
- 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 - Vervang elke letter van het bericht door de overeenkomstige letter uit het nieuwe alfabet. Als de verschuivingswaarde bijvoorbeeld 3 is, wordt het woord hallo khoor.
- Om het bericht te ontsleutelen, schuift u elke letter evenveel terug. Als de verschuivingswaarde bijvoorbeeld 3 is, wordt het gecodeerde bericht khoor hallo.
Procedure:
- Doorloop de gegeven tekst teken voor teken.
- Transformeer voor elk teken het gegeven teken volgens de regel, afhankelijk van of we de tekst coderen of decoderen.
- Retourneert de nieuwe gegenereerde tekenreeks.
Een programma dat een tekst (tekenreeks) en een Shift-waarde (geheel getal) ontvangt en de gecodeerde tekst retourneert.
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> |
>
>
Uitvoer
Text : ATTACKATONCE Shift: 4 Cipher: EXXEGOEXSRGI>
Tijdcomplexiteit: O(N) waarbij N de lengte van de gegeven tekst is
Hulpruimte: OP)
Hoe te decoderen?
We kunnen ofwel een andere functie voor het decoderen schrijven, vergelijkbaar met coderen, waarbij de gegeven verschuiving in de tegenovergestelde richting wordt toegepast om de originele tekst te decoderen. We kunnen echter de cyclische eigenschap van het cijfer onder modulo gebruiken, waardoor we eenvoudig kunnen observeren
Cipher(n) = De-cipher(26-n)>
Daarom kunnen we dezelfde functie gebruiken om te decoderen, maar in plaats daarvan zullen we de shift-waarde zo wijzigen dat shift = 26-shift (zie dit voor een voorbeeldrun in C++).