Kategorie: 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
Mateusz M.

Ostatnie wpisy

Python 1.0 vs. 3.13: Co się zmieniło?

Cześć. Dziś luźny artykuł, bo dziś pobawimy się jedną z pierwszy wersji Pythona. Skompilujemy go i zobaczymy co tam w… Read More

1 tydzień ago

Podsumowanie: styczeń i luty 2025

Nowy rok czas zacząć! Więc lećmy z podsumowaniem. Nowy artykuł Nie uwierzycie, ale pojawił się na blogu nowy artykuł! Piszę… Read More

3 tygodnie ago

Just-in-time compiler (JIT) w Pythonie

Cześć! W Pythonie 3.13 dodano JITa! JIT, czyli just-in-time compiler to optymalizacja na która Python naprawdę długo czekał. Na nasze… Read More

1 miesiąc ago

Podsumowanie roku 2024

Cześć! Zapraszam na podsumowanie roku 2024. Książki W sumie rok 2024 był pod względem ilości książek nieco podobny do roku… Read More

1 miesiąc ago

Podsumowanie: wrzesień, październik, listopad i grudzień 2024

Podtrzymując tradycję, prawie regularnych podsumowań, zapraszam na wpis! Nie mogło obyć się bez Karkonoszy We wrześniu odwiedziłem z kolegą Karkonosze,… Read More

2 miesiące ago

Podsumowanie: maj, czerwiec, lipiec i sierpień 2024

Oj daaawnoo mnie tu nie było. Ale wakacje to był czas dużej liczby intensywnych wyjazdów i tak naprawdę, dopiero jakoś… Read More

6 miesięcy ago