Caesar Cipher i kryptografi

Caesar Cipher i kryptografi
  • Cæsar-chifferet er en enkel krypteringsteknikk som ble brukt av Julius Cæsar for å sende hemmelige meldinger til sine allierte. Det fungerer ved å flytte bokstavene i klartekstmeldingen med et visst antall posisjoner, kjent som skift eller nøkkel.
  • Caesar Cipher-teknikken er en av de tidligste og enkleste metodene for krypteringsteknikk. Det er ganske enkelt en type erstatningssiffer, det vil si at hver bokstav i en gitt tekst erstattes av en bokstav med et fast antall posisjoner nedover i alfabetet. For eksempel med et skift på 1, vil A bli erstattet av B, B vil bli C, og så videre. Metoden er tilsynelatende oppkalt etter Julius Caesar, som tilsynelatende brukte den til å kommunisere med sine tjenestemenn.
  • For å chiffere en gitt tekst trenger vi derfor en heltallsverdi, kjent som et skift som indikerer antall posisjoner hver bokstav i teksten har blitt flyttet ned.
    Krypteringen kan representeres ved hjelp av modulær aritmetikk ved først å transformere bokstavene til tall, i henhold til skjemaet, A = 0, B = 1,…, Z = 25. Kryptering av en bokstav ved et skift n kan beskrives matematisk som.
  • For eksempel, hvis skiftet er 3, vil bokstaven A bli erstattet med bokstaven D, B vil bli E, C vil bli F, og så videre. Alfabetet er viklet rundt slik at det etter Z starter tilbake på A.
  • Her er et eksempel på hvordan du bruker Cæsar-chifferet for å kryptere meldingen HELLO med et skifte på 3:
  1. Skriv ned klartekstmeldingen: HEI
  2. Velg en skiftverdi. I dette tilfellet vil vi bruke et skift på 3.
  3. Erstatt hver bokstav i klartekstmeldingen med bokstaven som er tre posisjoner til høyre i alfabetet.

H blir K (skift 3 fra H)

E blir H (skift 3 fra E)

L blir O (skift 3 fra L)

L blir O (skift 3 fra L)

O blir R (skift 3 fra O)

4. Den krypterte meldingen er nå KHOOR.

  • For å dekryptere meldingen trenger du ganske enkelt å flytte hver bokstav tilbake med samme antall posisjoner. I dette tilfellet vil du flytte hver bokstav i KHOOR tilbake med 3 posisjoner for å få den opprinnelige meldingen, HELLO.


E_n(x)=(x+n)mod 26
(Krypteringsfase med skift n)

D_n(x)=(x-n)mod 26
(Dekrypteringsfase med skift n)

Caesar Cipher 3

Eksempler:

 Text : ABCDEFGHIJKLMNOPQRSTUVWXYZ Shift : 23 Cipher : XYZABCDEFGHIJKLMNOPQRSTUVW Text : ATTACKATONCE Shift : 4 Cipher : EXXEGOEXSRGI 

Fordeler:

  • Enkel å implementere og bruke, og gjør det egnet for nybegynnere å lære om kryptering.
  • Kan implementeres fysisk, for eksempel med et sett med roterende disker eller et sett med kort, kjent som en scytale, som kan være nyttig i visse situasjoner.
  • Krever bare et lite sett med forhåndsdelt informasjon.
  • Kan enkelt endres for å lage en sikrere variant, for eksempel ved å bruke flere skiftverdier eller nøkkelord.

Ulemper:

  • Den er ikke sikker mot moderne dekrypteringsmetoder.
  • Sårbar for kjente klartekstangrep, der en angriper har tilgang til både den krypterte og ukrypterte versjonen av de samme meldingene.
  • Det lille antallet mulige nøkler betyr at en angriper enkelt kan prøve alle mulige nøkler til den riktige er funnet, noe som gjør den sårbar for et brute force-angrep.
  • Det er ikke egnet for lang tekstkryptering, da det ville være lett å knekke.
  • Den er ikke egnet for sikker kommunikasjon da den lett brytes.
  • Gir ikke konfidensialitet, integritet og autentisitet i en melding.

Funksjoner av caesar cipher:

  1. Substitusjons-chiffer: Cæsar-chifferet er en type substitusjons-chiffer, der hver bokstav i klarteksten erstattes av en bokstav et eller annet fast antall posisjoner nedover i alfabetet.
  2. Fast nøkkel: Cæsar-chifferet bruker en fast nøkkel, som er antall posisjoner som bokstavene forskyves med. Denne nøkkelen er kjent for både avsender og mottaker.
  3. Symmetrisk kryptering: Cæsar-chifferet er en symmetrisk krypteringsteknikk, noe som betyr at den samme nøkkelen brukes til både kryptering og dekryptering.
  4. Begrenset tasterom: Cæsar-chifferet har et svært begrenset nøkkelrom på kun 26 mulige nøkler, da det kun er 26 bokstaver i det engelske alfabetet.
  5. Sårbar for brute force-angrep: Cæsar-chifferet er sårbart for brute force-angrep, siden det bare er 26 mulige nøkler å prøve.
  6. Enkel å implementere: Caesar-chifferet er veldig enkelt å implementere og krever bare enkle aritmetiske operasjoner, noe som gjør det til et populært valg for enkle krypteringsoppgaver.

Regler for Caesar Cipher:

  1. Velg et tall mellom 1 og 25. Dette vil være din skiftverdi.
  2. Skriv ned bokstavene i alfabetet i rekkefølge, fra A til Å.
  3. Skift hver bokstav i alfabetet med skiftverdien. For eksempel, hvis skiftverdien er 3, vil A bli D, B blir E, C vil bli F, og så videre.
  4. Krypter meldingen din ved å erstatte hver bokstav med den tilsvarende flyttede bokstaven. For eksempel, hvis skiftverdien er 3, vil ordet hei bli khoor.
  5. For å dekryptere meldingen, reverser du prosessen ved å flytte hver bokstav tilbake med samme beløp. For eksempel, hvis skiftverdien er 3, vil den krypterte meldingen khoor bli hei.

Algoritme for Caesar Cipher:
Inndata:

  1. Velg en skiftverdi mellom 1 og 25.
  2. Skriv ned alfabetet i rekkefølge fra A til Å.
  3. Opprett et nytt alfabet ved å flytte hver bokstav i det opprinnelige alfabetet med skifteverdien. For eksempel, hvis skiftverdien er 3, vil det nye alfabetet være:
  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. Erstatt hver bokstav i meldingen med den tilsvarende bokstaven fra det nye alfabetet. For eksempel, hvis skiftverdien er 3, vil ordet hei bli khoor.
  6. For å dekryptere meldingen, flytt hver bokstav tilbake med samme beløp. For eksempel, hvis skiftverdien er 3, vil den krypterte meldingen khoor bli hei.

Fremgangsmåte:

  • Gå gjennom den gitte teksten ett tegn om gangen.
  • For hvert tegn, transformer det gitte tegnet i henhold til regelen, avhengig av om vi krypterer eller dekrypterer teksten.
  • Returner den nye genererte strengen.

Et program som mottar en tekst (streng) og Shift-verdi (heltall) og returnerer den krypterte teksten.

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>

Produksjon
Text : ATTACKATONCE Shift: 4 Cipher: EXXEGOEXSRGI 

Tidskompleksitet: O(N) hvor N er lengden på den gitte teksten
Ekstra plass: PÅ)

Hvordan dekryptere?
Vi kan enten skrive en annen funksjon som ligner på kryptering, som vil bruke det gitte skiftet i motsatt retning for å dekryptere den opprinnelige teksten. Imidlertid kan vi bruke den sykliske egenskapen til chifferen under modulo, derfor kan vi ganske enkelt observere

Cipher(n) = De-cipher(26-n) 

Derfor kan vi bruke den samme funksjonen til å dekryptere, i stedet vil vi modifisere skiftverdien slik at skift = 26-skift (se dette for en prøvekjøring i C++).