Informacje o nowych artykułach oraz akcjach edukacyjnych prosto na Twojej skrzynce e-mail!

Szyfr Cezara

Szyfr Cezara (szyfr przesuwający) jest jednym z najstarszych znanych szyfrów. Jest on zbudowany na zasadzie szyfru podstawieniowego gdzie każda litera, tekstu niezaszyfrowanego zastępowana jest oddaloną od niej o stałą liczbę pozycji w alfabecie inną literą. W szyfrze Cezara nie rozróżnia się dużych i małych liter.

Obecnie Szyfr Cezara nie gwarantuje żadnego bezpieczeństwa.

Zasada działania Szyfru Cezara jest bardzo prosta:

Każdą literę tekstu niezaszyfrowanego zastępujemy inną przesuniętą względem litery kodowanej o stałą liczbę pozycji w alfabecie. Na przykład dla litery „a” (kod ASCII 97) przy przesunięciu o 2, literą kodowaną będzie „c” (kod ASCII 99) itd.

Przeanalizujmy prosty program szyfrujący szyfrem Cezara. Aplikacja została napisana w języku C#:

using System;
class Program
{
    public static void Main()
    {
        Console.WriteLine("Proszę wciskać dowolne klawisze.");
        ConsoleKeyInfo keyInfo;
        do
        {
            keyInfo = Console.ReadKey(true);
            if (keyInfo.KeyChar >= 97 && keyInfo.KeyChar <= 122)
            {
                char znak = (char)(((keyInfo.KeyChar - 97 + 2) % 26) + 97);
                Console.WriteLine(znak);
            }
        } while (keyInfo.Key != ConsoleKey.Escape);
    }
}

Głównym elementem programu, który odpowiedzialny jest za szyfrowanie jest ten fragment:

char znak = (char)(((keyInfo.KeyChar - 97 + 2) % 26) + 97);

Działa on w następujący sposób:

  1. Najpierw pobieramy kod ASCII wprowadzonego znaku ( keyInfo.KeyChar ),
  2. Następnie odejmujemy 97 (kod ASCII litery „a”), aby zamienić literę na jej pozycję w alfabecie (0-25),
  3. do pozycji dodajemy wartość przesunięcia (tutaj: 2) i wykonujemy dzielenie modulo 26, czyli przez liczbę liter alfabetu – dzięki temu koniec alfabetu „zawija się” na jego początek,
  4. na końcu dodajemy z powrotem 97, aby otrzymać kod ASCII zaszyfrowanej litery.

Dzięki tak przygotowanemu algorytmowi każda litera zostanie odpowiednio zakodowana.

Szyfr Cezara w C++:

#include <iostream>
#include <string>

using namespace std;

void szyfrowanie(string &tekst)
{
    int dlugosc = tekst.length();
    
    for(int i=0;i<dlugosc;i++)
        tekst[i] = (char)(((tekst[i] - 97 + 2) % 26) + 97);
}

int main() {
    
    string tekst;
    
    cout << "Podaj tekst:\n";
    cin >> tekst;
    
    szyfrowanie(tekst);
    
    cout << "Po zaszyfrowaniu:\n";
    cout << tekst;
    
    return 0;
}

Spodobało się?

Jeśli tak, to zarejestruj się do newslettera aby otrzymywać informacje nowych artykułach oraz akcjach edukacyjnych. Gwarantuję 100% satysfakcji i żadnego spamowania!

, ,

Dodaj komentarz

Odpowiedz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Pin It on Pinterest