Szyfr Cezara lub cykliczny.
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.

Daną literę zamieniamy na literę, która jest od niej o k pozycji dalej w alfabecie. Jeśli brakuje liter, wracamy do początku (stąd ,,cykliczny''). Liczbę pozycji k nazywamy kluczem. Klucz oznaczamy liczbą od 0 do 26 lub literą, na którą przechodzi a. Taka konwencja jest dość wygodna, zwłaszcza, kiedy chcemy przejść do bardziej skomplikowanych szyfrów Vigenere'a. Jeśli chcemy zaszyfrować tekst kod leonarda kluczem 3 (d), zamieniamy każdą literę na trzecią po niej, tj, k przechodzi na n, o na r itd. W rezultacie otrzymujemy nrgoh rqdug d. Rozszyfrowujemy według tej samej zasady, przy czym kluczem jest liczba 26-k, gdzie k jest kluczem, którym szyfrowany był tekst. Na przykład, jeśli tekst beqmz lhiah gnzwe był zaszyfrowany kluczem 8, to kluczem rozszyfrowującym jest 18. Stosując ten klucz otrzymujemy tekst jawny twierdza szyfrow.
#include <iostream>
#include <cstdlib>
#include <cstring>
//Szyfr podstawieniowy - Cezara wersja 1
using namespace std;
void szyfruj(int klucz, char tab[])
{
int dl = strlen(tab); //okreslenie ilosci znakow wyrazu
if(klucz >= 0)
for(int i=0;i <dl;i++)
tab[i] = (tab[i] - 65 + klucz)%26 + 65;
else
for(int i=0;i <dl;i++)
tab[i] = (tab[i] + 65 + klucz)%26 + 65;
}
int main()
{
char tab[1001]; //tablica znakow - max 1000 znaków.
int klucz;
cout < <"Podaj wyraz składajacy sie z duzych liter: ";
cin>>tab;
cout < <"Podaj klucz z przedziału [-10..10]: ";
cin>>klucz;
szyfruj(klucz,tab); //szyfrowanie
cout < <"Po zaszyfrowaniu: " < <tab < <endl;
szyfruj(-klucz,tab); //deszyfrowanie
cout < <"Po rozszyfrowaniu: " < <tab < <endl;
system("pause");
return 0;
}
Drugi sposób
#include<iostream>
#define STOP '\n'
using namespace std;
int main()
{
int a=0;
int b=0;
int znacznik=0;
char c;
char tab[19];
char tab2[19];
char alfabet[26] = {'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'};
int l_znak = 0;
cout<<"Podaj wyraz"<<'\n';
while ((c = getchar()) != STOP)
{
tab[l_znak]=c;
l_znak++;
}
if (l_znak<=20)
{
for( int i=0; i!=l_znak; i++)
{
for(int x=0; x!=23; x++)
{
if (tab[i]==alfabet[x])
{
b=x;
a=x;
a=a+3;
tab2[i]=alfabet[a];
}
if (tab[i]==' ')
{
tab2[i]=' ';
}
}
for(int x=23; x!=26; x++)
{
a=0;
if (tab[i]==alfabet[x])
{
a=x-23;
tab2[i]=alfabet[a];
}
}
}
cout<<"Zaszyfrowany komunikat z uzyciem klasycznego szyfru Cezara brzmi: "<<endl;
for(int i=0; i!=l_znak; i++)
{
cout<<tab2[i];
}
cout<<'\n';
system("Pause");
}
else
{
cout<<"Podales za dlugi wyraz"<<'\n';
system("Pause");
}
}