logo

Caesar Cipher i kryptografi

  • Caesar-chifferet är en enkel krypteringsteknik som användes av Julius Caesar för att skicka hemliga meddelanden till sina allierade. Det fungerar genom att skifta bokstäverna i klartextmeddelandet med ett visst antal positioner, känd som skift eller tangent.
  • Caesar Cipher-tekniken är en av de tidigaste och enklaste metoderna för krypteringsteknik. Det är helt enkelt en typ av substitutionschiffer, det vill säga att varje bokstav i en given text ersätts av en bokstav med ett fast antal positioner nedåt i alfabetet. Till exempel med ett skift på 1 skulle A ersättas med B, B skulle bli C, och så vidare. Metoden är tydligen uppkallad efter Julius Caesar, som tydligen använde den för att kommunicera med sina tjänstemän.
  • För att chiffra en given text behöver vi alltså ett heltalsvärde, känt som ett skift som anger antalet positioner varje bokstav i texten har flyttats ned.
    Krypteringen kan representeras med hjälp av modulär aritmetik genom att först omvandla bokstäverna till siffror, enligt schemat, A = 0, B = 1,…, Z = 25. Kryptering av en bokstav med ett skift n kan beskrivas matematiskt som.
  • Till exempel, om skiftet är 3, då skulle bokstaven A ersättas med bokstaven D, B skulle bli E, C skulle bli F, och så vidare. Alfabetet lindas runt så att det efter Z börjar om på A.
  • Här är ett exempel på hur man använder Caesar-chifferet för att kryptera meddelandet HELLO med ett skift på 3:
  1. Skriv ner textmeddelandet: HEJ
  2. Välj ett skiftvärde. I det här fallet kommer vi att använda ett skift på 3.
  3. Byt ut varje bokstav i klartextmeddelandet med bokstaven som är tre positioner till höger i alfabetet.

H blir K (skift 3 från H)

E blir H (skift 3 från E)



L blir O (skift 3 från L)

objekt för array i java

L blir O (skift 3 från L)

O blir R (skift 3 från O)



java är lika med metoden

4. Det krypterade meddelandet är nu KHOOR.

  • För att dekryptera meddelandet behöver du helt enkelt flytta tillbaka varje bokstav med samma antal positioner. I det här fallet skulle du flytta tillbaka varje bokstav i KHOOR med 3 positioner för att få det ursprungliga meddelandet, HEJ.


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

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



Caesar Cipher 3

Exempel:

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

Fördelar:

  • Lätt att implementera och använda, vilket gör det lämpligt för nybörjare att lära sig om kryptering.
  • Kan implementeras fysiskt, till exempel med en uppsättning roterande skivor eller en uppsättning kort, känd som en scytale, vilket kan vara användbart i vissa situationer.
  • Kräver bara en liten uppsättning fördelad information.
  • Kan enkelt modifieras för att skapa en säkrare variant, till exempel genom att använda flera skiftvärden eller nyckelord.

Nackdelar:

  • Det är inte säkert mot moderna dekrypteringsmetoder.
  • Sårbar för attacker med kända klartext, där en angripare har tillgång till både den krypterade och okrypterade versionen av samma meddelanden.
  • Det lilla antalet möjliga nycklar gör att en angripare enkelt kan prova alla möjliga nycklar tills den rätta hittas, vilket gör den sårbar för en brute force attack.
  • Det är inte lämpligt för lång textkryptering eftersom det skulle vara lätt att knäcka.
  • Den är inte lämplig för säker kommunikation eftersom den lätt går sönder.
  • Ger inte konfidentialitet, integritet och äkthet i ett meddelande.

Funktioner av caesar chiffer:

  1. Substitutionschiffer: Caesar-chifferet är en typ av substitutionschiffer, där varje bokstav i klartexten ersätts av en bokstav något fast antal positioner ner i alfabetet.
  2. Fast nyckel: Caesar-chifferet använder en fast nyckel, vilket är antalet positioner med vilka bokstäverna flyttas. Denna nyckel är känd för både avsändaren och mottagaren.
  3. Symmetrisk kryptering: Caesar-chifferet är en symmetrisk krypteringsteknik, vilket innebär att samma nyckel används för både kryptering och dekryptering.
  4. Begränsat tangentutrymme: Caesar-chifferet har ett mycket begränsat tangentutrymme på endast 26 möjliga nycklar, eftersom det bara finns 26 bokstäver i det engelska alfabetet.
  5. Sårbar för brute force-attacker: Caesar-chifferet är sårbart för brute force-attacker, eftersom det bara finns 26 möjliga nycklar att prova.
  6. Lätt att implementera: Caesar-chifferet är mycket lätt att implementera och kräver bara enkla aritmetiska operationer, vilket gör det till ett populärt val för enkla krypteringsuppgifter.

Regler för Caesar Cipher:

sanjay dutt och
  1. Välj ett tal mellan 1 och 25. Detta kommer att vara ditt skiftvärde.
  2. Skriv ner bokstäverna i alfabetet i ordning, från A till Ö.
  3. Flytta varje bokstav i alfabetet med skiftvärdet. Till exempel, om skiftvärdet är 3, skulle A bli D, B skulle bli E, C skulle bli F, och så vidare.
  4. Kryptera ditt meddelande genom att ersätta varje bokstav med motsvarande förskjutna bokstav. Till exempel, om skiftvärdet är 3, skulle ordet hej bli khoor.
  5. För att dekryptera meddelandet, vänd helt enkelt processen genom att flytta tillbaka varje bokstav med samma belopp. Till exempel, om skiftvärdet är 3, skulle det krypterade meddelandet khoor bli hej.

Algoritm för Caesar Cipher:
Inmatning:

css kommentar
  1. Välj ett skiftvärde mellan 1 och 25.
  2. Skriv ner alfabetet i ordning från A till Ö.
  3. Skapa ett nytt alfabet genom att flytta varje bokstav i det ursprungliga alfabetet med skiftvärdet. Till exempel, om skiftvärdet är 3, skulle det nya alfabetet vara:
  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. Ersätt varje bokstav i meddelandet med motsvarande bokstav från det nya alfabetet. Till exempel, om skiftvärdet är 3, skulle ordet hej bli khoor.
  6. För att dekryptera meddelandet, flytta tillbaka varje bokstav med samma belopp. Till exempel, om skiftvärdet är 3, skulle det krypterade meddelandet khoor bli hej.

Procedur:

  • Gå igenom den givna texten ett tecken i taget.
  • För varje tecken, transformera det givna tecknet enligt regeln, beroende på om vi krypterar eller dekrypterar texten.
  • Returnera den nya genererade strängen.

Ett program som tar emot ett Text (sträng) och Shift-värde (heltal) och returnerar den krypterade texten.

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>
>
>

Produktion
Text : ATTACKATONCE Shift: 4 Cipher: EXXEGOEXSRGI>

Tidskomplexitet: O(N) där N är längden på den givna texten
Extra utrymme: PÅ)

Hur dekrypterar man?
Vi kan antingen skriva en annan funktion dekryptera liknande kryptera, som kommer att tillämpa det givna skiftet i motsatt riktning för att dekryptera den ursprungliga texten. Men vi kan använda chiffrets cykliska egenskap under modulo, därför kan vi helt enkelt observera

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

Därför kan vi använda samma funktion för att dekryptera, istället kommer vi att modifiera skiftvärdet så att skift = 26-skift (Se detta för en provkörning i C++).