- Cezario šifras yra paprastas šifravimo būdas, kurį naudojo Julius Cezaris, norėdamas siųsti slaptus pranešimus savo sąjungininkams. Jis veikia perkeliant raides paprastojo teksto žinutėje tam tikru skaičiumi pozicijų, vadinamų Shift arba klavišu.
- Cezario šifro technika yra vienas iš ankstyviausių ir paprasčiausių šifravimo metodų. Tai tiesiog pakaitinio šifro tipas, t. y. kiekviena tam tikro teksto raidė pakeičiama raide su fiksuotu abėcėlės pozicijų skaičiumi. Pavyzdžiui, pakeitus 1, A būtų pakeistas B, B taptų C ir pan. Metodas, matyt, pavadintas Juliaus Cezario vardu, kuris, matyt, naudojo jį bendraudamas su savo pareigūnais.
- Taigi, norint užšifruoti tam tikrą tekstą, mums reikia sveikojo skaičiaus reikšmės, vadinamos poslinkiu, kuris nurodo pozicijų skaičių, kai kiekviena teksto raidė buvo perkelta žemyn.
Šifravimas gali būti pavaizduotas naudojant modulinę aritmetiką, pirmiausia raides paverčiant skaičiais, pagal schemą A = 0, B = 1,…, Z = 25. Raidės šifravimą poslinkiu n galima matematiškai apibūdinti kaip. - Pavyzdžiui, jei poslinkis yra 3, tai raidė A būtų pakeista raide D, B taptų E, C – F ir pan. Abėcėlė apvyniojama taip, kad po Z ji prasidėtų nuo A.
- Štai pavyzdys, kaip naudoti Cezario šifrą, norint užšifruoti pranešimą HELLO su 3 poslinkiu:
- Užsirašykite paprastą tekstinį pranešimą: HELLO
- Pasirinkite poslinkio reikšmę. Šiuo atveju naudosime 3 pamainą.
- Pakeiskite kiekvieną paprastojo teksto pranešimo raidę raide, kuri yra trimis pozicijomis į dešinę abėcėlėje.
H tampa K (3 poslinkis nuo H)
E tampa H (3 poslinkis nuo E)
L tampa O (3 poslinkis iš L)
žemėlapio java iteratorius
L tampa O (3 poslinkis iš L)
O tampa R (3 poslinkis nuo O)
4. Užšifruotas pranešimas dabar yra KHOOR.
- Norėdami iššifruoti pranešimą, tiesiog turite perkelti kiekvieną raidę tiek pat pozicijų atgal. Tokiu atveju kiekvieną KHOOR raidę perkeltumėte 3 pozicijomis atgal, kad gautumėte pradinį pranešimą HELLO.
(Šifravimo fazė su poslinkiu n)
bfs paieška
(Iššifravimo fazė su poslinkiu n)

Pavyzdžiai:
Text : ABCDEFGHIJKLMNOPQRSTUVWXYZ Shift : 23 Cipher : XYZABCDEFGHIJKLMNOPQRSTUVW Text : ATTACKATONCE Shift : 4 Cipher : EXXEGOEXSRGI>
Privalumai:
- Lengva įdiegti ir naudoti, todėl pradedantiesiems tinka mokytis apie šifravimą.
- Gali būti fiziškai įgyvendintas, pvz., su besisukančių diskų rinkiniu arba kortelių rinkiniu, vadinamu scytale, kuris gali būti naudingas tam tikrose situacijose.
- Reikia tik nedidelio iš anksto bendrinamos informacijos rinkinio.
- Galima lengvai modifikuoti, kad būtų sukurtas saugesnis variantas, pvz., naudojant kelias poslinkio reikšmes arba raktinius žodžius.
Trūkumai:
- Jis nėra apsaugotas nuo šiuolaikinių iššifravimo metodų.
- Pažeidžiamas žinomo paprasto teksto atakoms, kai užpuolikas turi prieigą prie šifruotų ir nešifruotų tų pačių pranešimų versijų.
- Mažas galimų raktų skaičius reiškia, kad užpuolikas gali lengvai išbandyti visus įmanomus klavišus, kol randamas tinkamas, todėl jis yra pažeidžiamas žiaurios jėgos atakos.
- Jis netinka ilgam teksto šifravimui, nes jį būtų lengva nulaužti.
- Jis netinka saugiam bendravimui, nes lengvai sugenda.
- Neužtikrina pranešimo konfidencialumo, vientisumo ir autentiškumo.
Cezario šifro savybės:
- Pakaitinis šifras: Cezario šifras yra pakaitinio šifro tipas, kai kiekviena paprastojo teksto raidė pakeičiama raide tam tikru abėcėlės pozicijų skaičiumi.
- Fiksuotas raktas: Cezario šifras naudoja fiksuotą raktą, kuris yra pozicijų, kuriomis raidės perkeliamos, skaičius. Šį raktą žino ir siuntėjas, ir gavėjas.
- Simetrinis šifravimas: Cezario šifras yra simetrinė šifravimo technika, tai reiškia, kad šifravimui ir iššifravimui naudojamas tas pats raktas.
- Ribota klavišų erdvė: Cezario šifro klavišų erdvė yra labai ribota – tik 26 galimi klavišai, nes anglų abėcėlėje yra tik 26 raidės.
- Pažeidžiamas brutalios jėgos atakų: Cezario šifras yra pažeidžiamas brutalios jėgos atakų, nes galima išbandyti tik 26 raktus.
- Lengva įdiegti: Cezario šifrą labai lengva įdiegti ir jam reikia tik paprastų aritmetinių operacijų, todėl jis yra populiarus pasirinkimas atliekant paprastas šifravimo užduotis.
Cezario šifro taisyklės:
preg_match
- Pasirinkite skaičių nuo 1 iki 25. Tai bus jūsų poslinkio reikšmė.
- Užrašykite abėcėlės raides eilės tvarka nuo A iki Z.
- Perkelkite kiekvieną abėcėlės raidę poslinkio reikšme. Pavyzdžiui, jei poslinkio reikšmė yra 3, A taptų D, B – E, C – F ir pan.
- Užšifruokite savo pranešimą pakeisdami kiekvieną raidę atitinkama pasislinkusia raide. Pavyzdžiui, jei poslinkio reikšmė yra 3, žodis hello taps khoor.
- Norėdami iššifruoti pranešimą, tiesiog pakeiskite procesą, perkeldami kiekvieną raidę atgal tuo pačiu dydžiu. Pavyzdžiui, jei poslinkio reikšmė yra 3, užšifruotas pranešimas „khoor“ taps „hello“.
Cezario šifro algoritmas:
Įvestis:
- Pasirinkite poslinkio reikšmę nuo 1 iki 25.
- Užrašykite abėcėlę eilės tvarka nuo A iki Z.
- Sukurkite naują abėcėlę perkeldami kiekvieną pradinės abėcėlės raidę poslinkio reikšme. Pavyzdžiui, jei poslinkio reikšmė yra 3, naujoji abėcėlė bus tokia:
- 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 - Pakeiskite kiekvieną pranešimo raidę atitinkama raide iš naujos abėcėlės. Pavyzdžiui, jei poslinkio reikšmė yra 3, žodis hello taps khoor.
- Norėdami iššifruoti pranešimą, perkelkite kiekvieną raidę atgal tuo pačiu dydžiu. Pavyzdžiui, jei poslinkio reikšmė yra 3, užšifruotas pranešimas „khoor“ taps „hello“.
Procedūra:
- Pereikite pateiktą tekstą po vieną simbolį.
- Kiekvienam simboliui pakeiskite nurodytą simbolį pagal taisyklę, priklausomai nuo to, ar tekstą šifruojame, ar iššifruojame.
- Grąžinkite sugeneruotą naują eilutę.
Programa, kuri gauna teksto (eilutės) ir Shift reikšmę (sveikasis skaičius) ir grąžina užšifruotą tekstą.
Fredis Merkuris
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 |
>
>//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>>>
IšvestisText : ATTACKATONCE Shift: 4 Cipher: EXXEGOEXSRGI>Laiko sudėtingumas: O(N), kur N yra nurodyto teksto ilgis
Pagalbinė erdvė: O(N)Kaip iššifruoti?
Galime parašyti kitą funkciją iššifruoti, panašią į šifravimą, kuri pritaikys nurodytą poslinkį priešinga kryptimi, kad iššifruotų pradinį tekstą. Tačiau galime naudoti ciklinę šifro savybę pagal modulo, todėl galime tiesiog stebėtiCipher(n) = De-cipher(26-n)>Taigi, iššifruodami galime naudoti tą pačią funkciją, vietoj to pakeisime poslinkio reikšmę taip, kad Shift = 26 poslinkiai (žr. tai pavyzdyje C++).