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"); 
             } 
          
}