Szyfrowanie tekstu jest zabiegiem, który ma na celu uniemożliwić odczytanie tekstu przez osoby nieupoważnione do tego. Z założenia zaszyfrowaną wiadomość zdoła odczytać jedynie osoba, dla której wiadomość jest przeznaczona. Osoba, która oczywiście zna szyfr. Zapraszam do zapoznania się z pojęciem szyfru Cezara i implementacjami szyfru Cezara w C++, Javie oraz Pythonie.
Szyfr Cezara - metoda szyfrowania
Szyfr Cezara (znany również jako kod Cezara oraz przesunięcie cezariańskie) jak nie trudno się domyślić ma coś wspólnego z najbardziej znanym rzymskim wodzem. Wykorzystywał on bowiem ten szyfr do komunikacji z oddziałami wojskowymi.
Szyfr ten jest podręcznikowym przykładem szyfru podstawieniowego, czyli takiego, który dany znak zastępuje innym. W metodzie szyfrowania Cezara znakiem, którym zastępujemy daną literę jest trzeci następny znak w alfabecie łaciński. Występuje więc tak zwane przesunięcie. Stąd kolejna nazwa dla tego szyfru: szyfr przesuwający.

Oczywiście przesunięcie o 3 nie jest obowiązkowe. Przesuwać można o więcej liter, przy czym dla każdej litery przesunięcie powinno być o tyle samo znaków i w tym samym kierunku.
Szyfry podstawieniowe nie są obecnie używane w profesjonalnym szyfrowaniu. Są po prostu zbyt proste i na pewno nie stanowią problemu dla współczesnych hackerów. Niemniej jednak zadanie, wykorzystujące szyfr Cezara wystąpiło na maturze z informatyki w 2016 roku, więc chyba warto się z nim zapoznać.

Szyfr Cezara - implementacja
W tym programie szyfrowanie odbywa się na oryginale naszej zmiennej tekstowej, a klucz jaki obierzemy może być dowolną liczbą całkowitą. Dla zachowania poprawności wpisane małe litery są zamieniane na duże za pomocą funkcji transform.
C++
//Program wykonujący szyfrowanie metodą Cezara
//Łukasz Kosiński
#include <iostream>
#include <algorithm>//zawiera definicję funkcji transform
using namespace std;
void szyfruj(string &napis, int k)
{ if(k>26)k=k%26;//jeżeli klucz będzie większy od liczby liter w alfabecie to go ucinamy
for(int i=0; i<napis.length(); i++)
{
if(napis[i]==' ')continue;//działanie pętli dla spacji w naszym napisie pomijamy za pomocą continue
napis[i]+=k;//wykonujemy przesunięcie o klucz
if(napis[i]>'Z') napis[i]-=26;//jeżeli literka ucieknie nam poza 'Z' to odejmujemy 26
}
}
int main()
{
string napis;
cout << "Wpisz informacje, ktora chcesz zaszyfrowac: ";
getline (cin,napis);
transform(napis.begin(), napis.end(), napis.begin(), ::toupper);//dla ułatwienia wszystkie litery w napisie zmieniamy na duże
int klucz;
cout << "Podaj klucz, za pomoca ktorego bedziesz szyfrowac: ";
cin >> klucz;
szyfruj(napis, klucz);
cout << napis << endl;
system("PAUSE");
return 0;
}
Java
import java.util.Scanner;
public class Caesar_encryption {
public static void main(String[] args) {
System.out.println("Program szyfrujący tekst za pomocą Szyfru cezara");
System.out.println("Podaj tekst do zaszyfrowania: ");
Scanner scanner = new Scanner(System.in); // inicjalizacja skanera, który będzie pobierał wartości zmiennych
String txt = scanner.nextLine().toUpperCase(); // pobieramy tekst od użytkownika, zamieniamy na duże litery
System.out.println("Podaj klucz szyfrowania (ilość przesunięć): ");
int n = scanner.nextInt(); // pobieramy liczbe przesuniec od uzytkownika
String encrypted = ""; // tworzymy zmienna pomocniczą , która przechowa utworzony tekst
for(int i =0; i < txt.length(); i++) { // iterujemy przez wprowadzony tekst
char c = (char) (txt.charAt(i) + n); // pobieramy znak na iterowanej pozycji i przesuwamy o wybraną przez użytkownika ilość znaków
if(c > 'Z') // jeżeli jednak wyjdziemy 'poza alfabet', to cofamy się o 26 znaków
c -= 26;
encrypted += c; // dopisujemy przesunięty znak do zmiennej
}
System.out.println("Twój tekst po szyfrowaniu cezara wygląda tak: " + encrypted); //drukujemy wynik
scanner.close(); //zwalniamy zasoby
}
}
Python
print("Program szyfrujący tekst za pomocą Szyfru cezara")
print("Podaj tekst do zaszyfrowania: ")
word = input().upper()
print("Podaj klucz szyfrowania (ilość przesunięć): ")
p = int(input())
encrypted = ""
for c in word:
if c != "\n":
ch = chr(ord(c) + p)
if ord(ch) > ord('Z'):
ch = chr(ord(ch)-26)
encrypted += ch
print("Twój tekst po szyfrowaniu cezara wygląda tak: " + encrypted)
Jeżeli chcesz zgłębić temat kryptografii i poznać inne metody szyfrowania, zachęcam Cię do zapoznania się z tą książką:





Dobrze wyjaśnione ;) Nie jest to na pewno nic bardzo skomplikowanego, coś bardzo zaawansowanego, ale na pewno niejedna osoba trafi na ten artykuł, który rozwiąże wiele wątpliwości.
Szyfr podstawieniowy może być o wiele silniejszy jeżeli zastosujemy np. szyfrowanie 2 znakowe, czyli w standardowym alfabecie będzie to już 676 kombinacji. Jak na razie jednak nie udało mi się napisać w C++ poprawnie działający program szyfrujący i deszyfrujący w systemie 2 znakowym, a zwiedziłem już sporo stron traktujących w tym temacie.
bardzo dźękuję za mega dobre wyjaźnienie szyfru cezara. zmotywofało mnje to do dalszej nałki ci plus plus.
chlopy powiem wam ze ogolnie zajebiscie to wyglada