Łapka LogoŁapka Infa
🗝️
Algorytmy

Szyfr Cezara

Klasyka kryptografii. Poznaj zasadę przesuwania liter w alfabecie oraz pułapki związane z wykraczaniem poza literę Z.

Szyfr Cezara

Szyfr Cezara polega na zastąpieniu każdej litery tekstu jawnego – literą znajdującą się o ustaloną liczbę miejsc (klucz) dalej w alfabecie. Jest to najsłynniejszy i najprostszy szyfr w historii. Jeśli klucz k = 3, to literka A zmienia się w D, B w E, i tak dalej.

Cała trudność polega na przeliczaniu kodów ASCII, aby po przejściu poza 90 ('Z') "odjąć" odpowiednią wartość i wrócić na początek alfabetu.

Python

def szyfruj_cezar(tekst, klucz):
    wynik = ""
    klucz = klucz % 26
    
    for znak in tekst:
        if 'A' <= znak <= 'Z':
            nowy_znak = chr(ord(znak) + klucz)
            if nowy_znak > 'Z':
                nowy_znak = chr(ord(nowy_znak) - 26)
            wynik += nowy_znak
        else:
            wynik += znak
            
    return wynik

print(szyfruj_cezar("MATURA", 3)) # PDWXUD

C++

#include <iostream>
#include <string>
using namespace std;

string szyfrujCezar(string tekst, int k) {
    string wynik = "";
    k = k % 26;
    
    for (int i = 0; i < tekst.length(); i++) {
        if (tekst[i] >= 'A' && tekst[i] <= 'Z') {
            char nowa = tekst[i] + k; 
            if (nowa > 'Z') nowa = nowa - 26; 
            wynik += nowa;
        } else {
            wynik += tekst[i]; 
        }
    }
    return wynik;
}

int main() {
    cout << szyfrujCezar("MATURA", 3) << endl; 
    return 0;
}

[!TIP] Jak napisać Deszyfrowanie (rozszyfrowywanie)? Aby powrócić do oryginalnego tekstu, musimy cofnąć literki o 3 pozycje, czyli zastosować ten sam algorytm z kluczem ujemnym, np. k = 26 - 3 = 23.