Mateusz Mazurek – programista z pasją

Python, architektura, ciekawostki ze świata IT

Programowanie

Szyfr Cezara [PHP]

Cześć! Cieszę się, że mnie odwiedziłeś/aś. Zanim przejdziesz do artykułu chciałbym zwrocić Ci uwagę na to, że ten artykuł był pisany kilka lat temu (2013-12-24) miej więc proszę na uwadzę że rozwiązania i przemyślenia które tu znajdziesz nie muszą być aktualne. Niemniej jednak zachęcam do przeczytania.

Chciałbym zaprezentować prosty, popularny szyfr Cezara. Idea szyfru polega na podstawieniu pod litery alfabetu jawnego, litery alfabetu zaszyfrowanego.

Alfabet zaszyfrowany to taki, który jest przesunięty o ilość liter. Przesuwać można w lewo lub w prawo – a sam alfabet się zatacza, tzn:

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 oto alfabet jawny.
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C oto alfabet zaszyfrowany.

Jak widać przesuniecie jest równe 3. W tym przykładzie przesuwam w lewo, usuwając 3 pierwsze litery i wstawiając je na koniec alfabetu.

Oto skrypt w PHP, który zaszyfruje tekst, szyfrem Cezara:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php


class SzyfrCezara {
   
    private $alfabet;
    private $przesuniec;

    public function __construct($iloscPrzesuniec){

        for($a = ord('A'); $a<=ord('Z'); $a++)
        {
            $this->alfabet[chr($a)]=chr($a);
        }
        $this->przesuniec=$iloscPrzesuniec;

    }

    private function stworzAlfabet(){

        $szyfr;
        foreach($this->alfabet as $litera)
        {
            $szyfr[$litera] = chr(65+(ord($litera)-(65-$this->przesuniec)) % 26 );
        }
        return $szyfr;

    }

    public function szyfruj($tekst){

        $tekst= str_split( strtoupper($tekst) );
        $szyfr = $this->stworzAlfabet();
        $nowyTekst="";
        foreach((array)$tekst as $litera)
            $nowyTekst.=$litera==" "?" ":$szyfr[$litera];

        return $nowyTekst;
    }

    public function odszyfruj($tekst){
        $deszyfr = array_flip($this->stworzAlfabet());
        $tekst= str_split( strtoupper($tekst) );
        $nowyTekst="";
        foreach((array)$tekst as $litera)
            $nowyTekst.=$litera==" "?" ":$deszyfr[$litera];

        return $nowyTekst;

    }
   

}
$txt='testujemy';
$t = new SzyfrCezara(3);
$zaszyfrowany = $t->szyfruj($txt);
echo 'Szyfrujemy: '.$txt.'<br>';
echo 'Zaszyfrowany: '.$zaszyfrowany.'<br>';
echo 'Odszyfrowany '.$t->odszyfruj( $zaszyfrowany );

W konstruktorze podajemy długość przesunięcia. A metoda szyfruj() – zwraca zaszyfrowany tekst.
Metodą odszyfruj możemy odszyfrować tekst :)

Pozdrawiam!

Dzięki za wizytę,
Mateusz Mazurek

A może wolisz nowości na mail?

Subskrybuj
Powiadom o
guest

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

0 komentarzy
Inline Feedbacks
View all comments