czwartek, 16 czerwca 2011

Szyfr przestawieniowy w C++

Ostatnio trochę grzebałem w zadaniach maturalnych z informatyki i trafiłem na polecenie napisania aplikacji używającej szyfru przestawieniowego opartego na macierzy do zaszyfrowania dowolnego tekstu. Długo się nie zastanawiając machnąłem sobie programik, którym mam zamiar się z wami podzielić i przy okazji nieco opisać jego bebechy. Kod programu z implementacją szyfru przestawieniowego:

#include <iostream>
#include <cstring>
#include <cmath>

using namespace std;

int main()
{
    string s = "ala ma kota a kot ma ale";
    string result = "";
    int matrix_size = ceil(sqrt(s.size()));
    char matrix[matrix_size][matrix_size];

    for (int i=0; i<matrix_size; i++) {
        for (int j=0; j<matrix_size; j++) {
            if ((i*matrix_size)+j >= s.length()) {
                matrix[i][j] = '_';
                continue;
            }
            matrix[i][j] = (s[(i*matrix_size)+j] == ' ' ? '_' : s[(i*matrix_size)+j]);
        }
    }

    for (int i=0; i<matrix_size; i++) {
        for (int j=0; j<matrix_size; j++)
            result += matrix[j][i];
    }

    cout << "Tekst zaszyfrowany: " << result << endl;

    return 0;
}

Zacznijmy od linii 15. Tam do wcześniej zdefiniowanego stringa wpisywany jest tekst, który chcemy zaszyfrować. Następnie obliczana jest długość tekstu (linia 17), zaś na jej podstawie program wylicza ilość kolumn i wierszów macierzy (linia 18), w której będzie umieszczony tekst. Funkcja sqrt() liczy pierwiastek z podanej liczby, natomiast ceil() zaokrągla w górę liczbę podaną jako argument. W linii 20 definiujemy macierz, do której następnie wpiszemy tekst do zaszyfrowania.
W liniach 23 - 29 mamy pętle, które wierszami, po jednej literce zapełniają każdą komórkę macierzy. Spacje zamieniane są na podkreślnik. Gdy ilość komórek jest większa od ilości znaków w tekście, końcowe komórki macierzy również są wypełniane podkreślnikami. Po wypełnieniu macierzy znakami w liniach 32 - 37 tekst z tablicy jest spisywany kolumnami do stringa result. W linii 40 na urządzenie wyjścia wypisywany jest zaszyfrowany tekst.

Jest to chyba najprostszy możliwy sposób w jaki można zaimplementować algorytm szyfrowania przestawieniowego.

1 komentarz:

  1. How to Play Coin Casino Game - Casino Ow
    The Coin Casino Game, with 1xbet the added bonus of playing coins from various games. Learn about Coin Casino games. choegocasino Learn how to win 인카지노 cash, get prizes, and more!

    OdpowiedzUsuń