jak uzywajac szyfru cezara zakodowac lub odkodowac wiadomosc, PHP Skrypty


[PHP] Jak używając szyfru Cezara zakodować lub odkodować wiadomość?

0x01 graphic

Chcesz za pomocą szyfru Cezara (lub jego modyfikacji) zakodować i odkodować tekst.

0x01 graphic

Szyfr Cezara jest bardzo prostym szyfrem monoalfabetycznym (korzysta z jednego, stałego alfabetu). Nazwa szyfru pochodzi od Juliusza Cezara, który używał go do przesyłania tajnych wiadomości.

To szyfr prosty nie tylko do zaimplementowania w dowolnym języku programowania, ale też bardzo łatwy do rozszyfrowania. Stąd nie nadaje się do szyfrowania bardzo ważnych informacji - łatwo go złamać nawet bez posługiwania się komputerem.

Szyfrowanie polega na przesunięciu znaku o 3 pozycje w prawo. Czyli zamiast A piszemy D, zamiast B piszemy E, itd. Klasyczny algorytm, wykorzystywany przez Cezara, opiera się na alfabecie składającym się z 26 znaków, gdzie przesunięcie wynosi 3 znaki.

Nic nie stoi jednak na przeszkodzie, aby alfabet wzbogacić o dowolne inne znaki, a przesunięcie zmienić np. na 16 znaków. Zobacz jak zrealizować klasyczny algorytm i jego wersję zmodyfikowaną.

Szyfrowanie klasyczne

<?

$tekst = "ALAMAKOTA";

$alfabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

$klucz = 3;

for ($i=0;$i<strlen($tekst);$i++) {

$szyfr .= $alfabet[(strpos($alfabet, $tekst[$i])+3) % strlen($alfabet)];

}

echo $szyfr;

// wynik: DODPDNRWD

?>

Korzystając z ustalonego alfabetu, w pętli pobieram każdą literę tekstu i ustalam jej pozycję z alfabecie za pomocą funkcji strpos(). Następnie dodaję do ustalonej pozycji kolejne 3 pozycje (przesuwam się w prawo).

Ponieważ dodając trzy pozycje mogę wyjść poza alfabet (np. dla litery Z), dodatkowo powstała liczba jest dzielona modulo 26 (strlen($alfabet)), dzięki czemu zawsze mieszczę się w zakresie alfabetu, tylko po przekroczeniu jego długości zaczynam przesuwanie od początku.

Deszyfrowanie klasyczne

<?

$szyfr = "DODPDNRWD";

$alfabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

$klucz = 3;

for ($i=0;$i<strlen($szyfr);$i++) {

$tekst .= $alfabet[(strpos($alfabet, $szyfr[$i])-3) % strlen($alfabet)];

}

echo $tekst;

// wynik: ALAMAKOTA

?>

To identyczny algorytm jak powyższy z wyjątkiem kierunku przesuwania liter. Tym razem przesuwam je w lewo, a więc zmieniam pozycje o -3 znaki.

Aby zmodyfikować algorytm możesz zmienić wartość klucza na inną, a alfabet wzbogacić o duże i małe litery (również polskie), spacje, znaki specjalne (kropki, przecinki, spacje) itd. Wtedy będzie to nadal szyfr Cezara, ale już zmodyfikowany.

<?

$tekst = "Dzisiaj żółw nie wychodził z domku!";

$alfabet = " !\"#$%&'()*+,-./0123456789:;<=>?@";

$alfabet.= "AaĄąBbCcĆćDdEeĘęFfGgHhIiJjKkLlŁłMmNnŃńOoÓó";

$alfabet.= "PpQqRrSsŚśTtUuVvWwXxYyZzŹźŻż[\]^_`{|}~";

$klucz = 18;

for ($i=0;$i<strlen($tekst);$i++) {

$szyfr .= $alfabet[(strpos($alfabet, $tekst[$i])+3) % strlen($alfabet)];

}

echo $szyfr;

// wynik: eŻKTKBL#]QNY#OKF#YŹDJPĘŻKN#Ż#ĘPŃŁW$

?>

To tajny przekaz. Oczywiście, o tym, że wróg nie opuścił bazy... Tylko alfabet jest pełny (ISO 8859-2), a przesunięcie wynosi 18 znaków.



Wyszukiwarka

Podobne podstrony:
Jak wysłać ze strony WWW e-mail z dowolnym załącznikiem, PHP Skrypty
Jak stworzyć prostą wyszukiwarkę dla własnych stron WWW, PHP Skrypty
Jak pobrać zawartość strony WWW korzystając z biblioteki CURL, PHP Skrypty
Jak uzyskać kolejny numer (id) ostatnio wstawionego rekordu, PHP Skrypty
jak przeslac dane z pol tekstowych do innych stron, PHP Skrypty
Jak pobrać i zapisać na dysk wskazane strony WWW, PHP Skrypty
Jak wypisać wszystkie anagramy podanego wyrazu (permutacja ciągu, PHP Skrypty
Jak zmienić tło strony w zależności od aktualnej godziny, PHP Skrypty
Jak zablokować powtórne przetwarzanie formularzy przy odświeżaniu strony, PHP Skrypty
Jak sprawdzić czy domena istnieje i do kogo należy, PHP Skrypty
Jak szybko przenieść zawartość pliku tekstowego do tabeli, PHP Skrypty
jak logowac unikatowe numery IP uzytkownikow z calego dnia, PHP Skrypty
Jak udostępnić stronę tylko dla wybranych numerów IP, PHP Skrypty
jak wykonac sortowanie przez wstawianie algorytm inserion sort, PHP Skrypty
Jak wysłać ze strony WWW e-mail z dowolnym załącznikiem, PHP Skrypty
Jak stworzyć prostą wyszukiwarkę dla własnych stron WWW, PHP Skrypty
Jak pobrać zawartość strony WWW korzystając z biblioteki CURL, PHP Skrypty
Jak uzyskać kolejny numer (id) ostatnio wstawionego rekordu, PHP Skrypty
Jak stworzyć zaawansowany test wyboru lub quiz, PHP Skrypty

więcej podobnych podstron