poniedziałek, 10 kwietnia 2017

Szyfr Cezara

Co to jest?
Zastępuje każdą literę tekstu jawnego inną, przesuniętą względem litery kodowanej o stałą liczbę pozycji w alfabecie.

Algorytm deszyfrowania tekstu zaszyfrowanego kodem Cezara
Wejście
Łańcuch tekstowy s zaszyfrowany kodem Cezara
Wyjście:
Tekst jawny
Elementy pomocnicze:
i  –  indeks, i N 
kod(x)  – zwraca kod litery x
znak(x)  – zamienia kod x na odpowiadający mu znak ASCII 

Lista kroków:
K01: Dla i = 0,1,...,|s| - 1 wykonuj K02...K03 ; przetwarzamy kolejne znaki tekstu 
K02:     Jeśli s[i] < "A" ∨ s[i] > "Z", to następny obieg pętli K01 ; pomijamy znaki nie będące literami A...Z 
K03:     s[i] ← znak(65 + (kod(s[i] - 42) mod 26) ; deszyfrujemy 
K04: Pisz s   
K05: Zakończ

Schemat blokowy

C++
#include <iostream>
#include <string>

using namespace std;

int main()
{
  string z;
  int i;

// odczytujemy wiersz znaków
cout<<"Podaj tekst do zaszyfrowania ";
  getline(cin,z);

// zamieniamy małe litery na duże
// i kodujemy szyfrem cezara

  for(i = 0; i < z.length(); i++)
  {
    z[i] = toupper(z[i]);
    if((z[i] >= 'A') && (z[i] <= 'Z')) z[i] = char(65 + (z[i] - 62) % 26);
  }

// wypisujemy zaszyfrowany tekst

  cout << z << endl << endl;
  return 0;

Program w Excel


Projektujemy tabelę
1) Numerujemy kolejne litery alfabetu łacińskiego od 0 do 25 (zakres od c4:AB4)
2) Do komórki C4 wprowadzamy funkcję: =ZNAK(C5+65)
3) W 6 wierszu w komórce c6 wprowadzamy klucz będący numerem przesunięcia
4) W komórce C6 wprowadzono formułę, która obliczy nową wartość znaku

W komórki F16-Q16 należy wpisywać litery do zaszyfrowania
W następnym wierszu używamy funkcji: =KOD(komórka wiersz wyżej)-97
W wierszu 20 używamy funkcji: =ZNAK(F19+65) – za F19 wstawiamy komórkę wiersz wyżej, tak samo jak w kroku 2

Po kolei algorytm w Excelu
  • wycięcie literki z ciągu -funkcja
  •  zamieniasz litery na cyfrę -funkcja
  •  dodanie warunku. Chodzi o to, że np. litera 'z' ma numer 122, jeśli dodasz 3 (tak jak normalnie w cyfrze cezara) to dostałbyś znaczek '}' taki. więc musisz napisać, że jeśli ten kod litery > 122, to wracasz do początku etc.
  •  nowy kod – zamiana na literę
  •  wpisanie w komórkę wyjściową
  •  powtarzanie powyższego tyle razy, jaka jest długość słowa.

Opracował:Adam D.