Transpoziční šifra a C#


Co je Transpoziční šifra?

Transpoziční šifra je klasická šifra, která nemění písmena textu, ale mění jejich pořadí. Na rozdíl od substitučních šifer, kde se písmena nahrazují jinými znaky, transpoziční šifra zachovává stejná písmena, jen je přeskupuje podle určitého pravidla. Tento typ šifry byl hojně používán v historii, například při vojenské komunikaci.

Princip Transpoziční šifry

  1. Výběr klíče – klíč určuje, jak budou písmena přeskupena. Nejčastěji se používá číslicový klíč, který určuje pořadí sloupců.
  2. Rozdělení textu – text se rozdělí do tabulky podle délky klíče. Například pro klíč 4 a text HELLO WORLD vznikne tabulka:
H E L L
O   W O
R L D X

(přidáno X pro doplnění bloku, aby tabulka byla úplná)

  1. Přečtení podle klíče – písmena se čtou ve sloupcích podle pořadí klíče. Pokud je klíč např. 3-1-4-2, přečte se sloupec 3, pak 1, pak 4, pak 2.
  2. Výsledný šifrovaný text – skládá se z písmen přečtených podle pořadí sloupců.

Bezpečnost Transpoziční šifry

Transpoziční šifra byla historicky považována za poměrně silnou, pokud útočník neznal klíč. Její bezpečnost závisí na délce klíče a způsobu přeskupení písmen. Moderní metody kombinují transpoziční šifry se substitučními, aby vznikly složitější šifry. Samotná jednoduchá transpoziční šifra je dnes snadno prolomitelná pomocí analýzy písmen a délky slov.

Příklad šifrování slova HELLO

Použijeme klíč 3-1-4-2 a doplníme text X pro úplnost:

Text: HELLO → doplněno na HELLOX
Tabulka:

H E L L
O X

Čtení podle klíče 3-1-4-2:

  • Sloupec 3 → L
  • Sloupec 1 → H O
  • Sloupec 4 → L
  • Sloupec 2 → E X

Výsledek: LHOLEX

Implementace Transpoziční šifry v C#

using System;
using System.Text;

class TranspositionCipher
{
    private int[] key;

    public TranspositionCipher(int[] key)
    {
        this.key = key;
    }

    public string Encrypt(string plaintext)
    {
        plaintext = plaintext.Replace(" ", "").ToUpper();
        int cols = key.Length;
        int rows = (int)Math.Ceiling((double)plaintext.Length / cols);

        char[,] table = new char[rows, cols];
        int index = 0;

        for (int r = 0; r < rows; r++)
        {
            for (int c = 0; c < cols; c++)
            {
                if (index < plaintext.Length)
                    table[r, c] = plaintext[index++];
                else
                    table[r, c] = 'X'; // doplnění
            }
        }

        StringBuilder sb = new StringBuilder();
        foreach (int k in key)
        {
            int col = k - 1;
            for (int r = 0; r < rows; r++)
                sb.Append(table[r, col]);
        }

        return sb.ToString();
    }
}

class Program
{
    static void Main()
    {
        int[] key = { 3, 1, 4, 2 };
        var cipher = new TranspositionCipher(key);
        string plaintext = "HELLO";
        string encrypted = cipher.Encrypt(plaintext);
        Console.WriteLine($"Původní text: {plaintext}");
        Console.WriteLine($"Zašifrovaný text: {encrypted}");
    }
}

Závěr

Transpoziční šifra ukazuje, že i pouhé přeskupení písmen může vytvořit čitelně nezrozumitelný text. Její jednoduchost ji činí snadno pochopitelnou a výbornou pro studium základů kryptografie. Přesto samotná není bezpečná pro moderní použití a často se kombinuje s dalšími šifrovacími technikami pro zvýšení odolnosti vůči kryptoanalýze.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *