Menu
Strona główna
Hacking
Programowanie
Telefonia Komórkowa
Kody do Gier
Linux
Dlaczego?
Programowanie w Delphi
Mapa strony
 Programy
Systemy
Artykuły PDF

Security

Skanery
Sniffery
Security

Windows

Użytkowe
Przegl?darki graficzne
Kodeki
Narzędzia plikowe
Narzędzia dyskowe
Narzędzia systemowe
Sterowniki
Szyfrowanie danych
Zarz?dzanie hasłami
Zarz?dzanie rejestrem
?aty i Patche
Zarz?dzanie pamięci?
Synchronizacja czasu
Nagrywanie płyt
Free Antivirus (Darmowe Antyvirusy)
Sterowniki
Obróbka d?więku
Edycja wideo

Internetowe

Bezpiecze?stwo
Programy P2P
Komunikatory
Dodatki do przegl?darek
Klienty poczty elektronicznej
Narzędzia Antyspamowe
Przegl?darki grup dyskusyjnych
Przegl?darki Offline
Serwery poczty elektronicznej
Telefonia komórkowa
Wyszukiwarki internetowe
Zdalny dostęp
Cybernianie
Klienty FTP
Narzędzia internetowe
Prywatnośc
Przegl?darki internetowe
Serwery FTP
Serwery WWW
Wspomagacze ści?gania
Zarz?dzanie sieci? lokaln?

Tuning Systemu

Diagnostyka i testowanie
Inne
Rozszerzenia pulpitu
Tapety na pulpit
Tuning Systemu
Ikony
Powłoki
Tuning sprzętu
Wygaszacze ekranu

Programowanie

Kompilatory
Biblioteki i komponenty
Bazy danych
Edytory programistyczne
?rodowiska programistyczne
Debugery
Tworzenie wersji instalacyjnych

Webmastering

Użytkowe
Kursy

Linux

Użytkowe
Internetowe
Multimedialne

Programy biurowe

Programy dla firm
Pakiety biurowe
Administracja
Edytory tekstu
Grafika prezentacyjna
Kadry i płace
Wspomaganie projektowania
Zarz?dzanie projektami
Bazy danych
Finanse i księgowośc
Handel
Programy ewidencyjne
Zarz?dzanie informacj? osobist? (PIM)
 Download GRY
Pelne Wersje GIER
 Artykuły > Programowanie > Szyfr Cezara - najstarszy szyfr

Szyfr Cezara - najstarszy szyfr

Rys historyczny

Szyfr Cezara jest w zasadzie najstarszym sposobem szyfrowania informacji. Autorstwo tego szyfru przypisuje się Juliuszowi Cezarowi, mimo że podejrzewa się, że to nie on był jego wynalazcą. Juliusz Cezar za pomocą tego szyfru pisał listy do Cycerona. Mimo, że szyfr ten jest bardzo prostym szyfrem (przez co dość łatwo go odszyfrować), to był on stosowany jeszcze w 1915 roku w armii rosyjskiej, bowiem był to jedyny szyfr, który sztab rosyjski był w stanie pojąć.

Opis idei szyfru Cezara

Oryginalny szyfr Cezara umożliwiał szyfrowanie jedynie liter alfabetu podstawowego, z przesunięciem o 3. My jednak założymy, że możemy szyfrować nie tylko litery, ale również wszystkie pozostałe znaki kodu ASCII, dzięki czemu będziemy mogli zastosować szyfr do dowolnych danych.

Sama idea szyfru jest bardzo prosta. Jeśli udało Ci się przeczytać artykuł Kartografia , to wiesz już, że każdy znak jest reprezentowany przez odpowiednią liczbę w kodzie ASCII. Ideą szyfru Cezara jest dodanie do każdego znaku szyfrowanego tekstu pewnej wartości liczbowej, co zmodyfikuje jego wartość w kodzie ASCII przez co "niemożliwe" będzie jego odczytanie.

Przykład zastosowania szyfru Cezara

Załóżmy, że mamy do zaszyfrowania słowo SZYFROWANIE. Przede wszystkim musimy ustalić jaką wartość postanowimy dodać do każdego znaku naszego słowa. Powiedzmy, że wybieramy wartość 3 (tak jak w oryginalnym szyfrze Cezara).

Zatem do każdej litery w naszym słowie SZYFROWANIE dodamy wartość 3. Aby to zrobić musimy wiedzieć, jakie są wartości każdej litery naszego słowa w kodzie ASCII (na szczęście w przykładowym programie nie musimy tego ręcznie podawać).

Poniżej przedstawiam sposób powstawania zaszyfrowanego słowa dla przesunięcia o wartości 3 i słowa SZYFROWANIE:

Szyfr Cezara - przykład

Jak więc widzisz, po zaszyfrowniu otrzymamy słowo V]\IURZDQLH. Co prawda na pierwszy rzut oka ciężko domyśleć się, jakie słowo zostało zaszyfrowane, jak się jednak pó?niej przekonasz, odszyfrowanie tekstów zaszyfrowanych szyfrem Cezara jest bardzo proste.

Dodatkowe informacje dotyczące szyfrowania

Przede wszystkim dzięki temu, że stosujemy tu nieco zmodyfikowaną wersję szyfru Cezara, że za pomocą tego szyfru możemy szyfrować nie tylko tekst, ale również wszystkie pozostałe znaki kodu ASCII, więc możemy dzięki niemu szyfrować pliki, które chcemy w prosty sposób zabezpieczyć przed niepowołanym dostępem.

Bardzo ważne jest zwrócenie uwagi, że znaki w kodzie ASCII są z przedziału od 0 do 255, czyli nie ciągną się w nieskończoność. Dlatego też nie możemy do każdego kodowanego znaku dodawać bezmyślnie ustaloną przez nas wartość liczbową. Np. gdybyśmy w naszym przykładzie wymyślili, że dodajemy do każdej wartości liczbę 200, to już pierwsza litera S+200=83+200=283 byłaby nieokreślona. Należy zatem wziąć pod uwagę tego typu sytuację.

Oczywiście możemy wybierać dowolną wartość liczbową, którą będziemy dodawać do każdego znaku, jednak nie powinniśmy tego robić również bezmyślnie. Nie powinniśmy dodawać liczb powyżej 255 bowiem w żaden sposób nie zmieni to sposobu szyfrowania. Dlaczego powyżej 255? Bowiem wartości w kodzie ASCII są od 0 do 255. Przykładowo, jeśli do litery S dodamy wartość 259, to szyfrowanie będzie identyczne jak w przypadku, gdybyśmy dodali wartość 3. Jak więc widzisz nie ma sensu wybierać aż tak dużych liczb.

Ważne jest również, że niezależnie jaką wartośc liczbową wybierzemy, aby dodawać do znaków szyfrowanych danych, to bezpieczeństwo pozostaje takie samo. Takie samo, jeśli do odszyfrowania będzie użyty komputer. Jeśli natomiast założymy, że ktoś będzie starał się "ręcznie" odszyfrować dane, teoretycznie najbezpieczniejsze będzie dodawanie wartości w okolicach połowy przedziału 0-255 czyli np. 122, 123 itp.

Funkcja szyfrująca i deszyfrująca

Wiesz już dokładnie jak działa szyfr Cezara. Czas teraz zapisać formalnie funkcje, za pomocą których będziemy szyfrować dane, a następnie je odszyfrowywać.

Wprowad?my następujące oznaczenia:

znak - bieżący znak w kodzie ASCII
przesuniecie - liczba którą będziemy dodawać do każdego znaku
mod - reszta z dzielenia (np. 3 mod 2 wynosi 1)

Wówczas funkcja szyfrująca będzie miała postać:
(znak+przesuniecie) mod 256

Natomiast funkcja deszyfrująca będzie wyglądała następująco:
(znak+256-przesuniecie) mod 256

UWAGA: Powyższe funkcje są prawdziwe jeśli liczba jest mniejsza lub równa od 255. Jak już wiesz, nie opłaca się stosować większego przesunięcia, więc tak naprawdę nie stanowi to żadnego ograniczenia.

Wyjaśnienie postaci funkcji szyfrującej i deszyfrującej

Zarówno funkcja szyfrująca, jak deszyfrująca mają tak "skomplikowaną" postać ze względu na to, że jak już kilkakrotnie wspominałem, znaki w kodzie ASCII nie moga przyjmować wartości powyżej wartości 255.

Gdyby znaki w kodzie ASCII mogły przyjmować dowolną wartość, wówczas funkcja szyfrująca wyglądałaby tak: znak+liczba, a funkcja deszyfrująca następująco: znak-liczba.

Pozostałe cześci, zarówno funkcji szyfrującej, jak i deszyfrującej wynikają tylko i wyłącznie z tego ograniczenia. Jeśli nie wierzysz w poprawność zapisu, sugeruję zastanowić się, dlaczego funkcje wyglądają tak, a nie inaczej.

Ocena bezpieczeństwa szyfru

Szyfr Cezara jest najprostszym znanym szyfrem i jak łatwo się domyślić jest on najmniej bezpieczny. Nadaje się on wyłącznie do zastosowania domowego.

Przedstawiona w tym artykule jest nawet ogólniejsza wersja tego szyfru, w której można szyfrować nie tylko litery, ale również inne znaki i to na dodatek z dowolnym przesunięciem (w oryginalnym szyfrze przesunięcie wynosiło zawsze 3).

Z drugiej strony, szyfr Cezara jest bardzo łatwy do zrozumienia i zaimplementowania. Daje on podstawy do zrozumienia bardziej zaawansowanych algorytmów szyfrowania.

Implementacja w C++

Poniżej przedstawiam przykładową implementację szyfrowania danych za pomocą rozszerzonego szyfru Cezara w języku C++.

Przykładowy program jest bardzo prosty, bowiem ma tylko przedstawić sposób implementacji szyfru w konkretnym języku programowania.

Aby uczynić program bardziej funkcjonalnym, warto napisać jego własną wersję, na przykład operującą na plikach lub całych katalogach.

#include <iostream>
#include <string>

using namespace std;

int main()
{
string oryginal, zaszyfrowany, odszyfrowany;
const int przesuniecie=3; // wartosc dodawana do znaku (mniejsza od 256)

cout <<"Podaj tekst do szyfrowania: ";
cin >>oryginal;
cin.ignore();
cout <<"Tekst oryginalny: "<<oryginal<<"\n\n";

//ustalenie rozmiaru tekstu zaszyfrowanego
zaszyfrowany.resize(oryginal.size());

for (unsigned int i=0; i<oryginal.size(); ++i)
zaszyfrowany[i]= (oryginal[i]+przesuniecie)%256;

cout <<"Tekst zaszyfrowany: "<<zaszyfrowany<<"\n\n";

//ustalenie rozmiaru tekstu odszyfrowanego
odszyfrowany.resize(zaszyfrowany.size());

for (unsigned int i=0; i<zaszyfrowany.size(); ++i)
odszyfrowany[i]=(zaszyfrowany[i]+256-przesuniecie)%256;

cout <<"Tekst odszyfrowany: "<<odszyfrowany<<"\n\n";


if( oryginal == odszyfrowany)
cout <<"Szyfrowanie przebieglo prawidlowo\n\n";
else
cout <<"Wystapil NIEZNANY blad podczas szyfrowania!!!\n\n";

cout <<"Nacisnij ENTER aby zakonczyc\n";
getchar();
return 0;
}

Kod wygenerowany programem CC++ Code Colouring

komentarz[1] |

Copyright Š 2006 - 2007 E-comet.info. Wszelkie prawa zastrzeżone.

programy,artykuły,gry online,teledyski,filmiki,smieszne reklamy,sterowniki,kodeki,programy,program,download, downloads,security,bramka sms, teledyski,antywirusy,darmowe free program,programy p2p,tapety,programy biurowe,programy dla firm,narzędzia dyskowe,edytory,gry strategiczne,gry przygodowe,gry sportowe, symulatory, gry rpg,gry karciane, gry zrecznosciowe. Zapraszamy.
0.033 |