Szyfr Cezara [PHP]

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
Podziel się na:
    Facebook email PDF Wykop Twitter

Dodaj komentarz

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subskrybuj  
Powiadom o