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.026 |