Шифр Скитала

mexan

Администратор
Сообщения
764
Реакции
110
Скитала - инструмент, используемый для осуществления перестановочного шифрования, в криптографии известный также как шифр Древней Спарты. Представляет собой цилиндр и узкую полоску пергамента, на которой писалось сообщение, обматывавшуюся вокруг него по спирали. Античные греки и спартанцы, предположительно, использовали этот шифр для обмена сообщениями во время военных кампаний.

Скитала является официальным символом Американской ассоциации криптограмм.

C#:
using System;

public class ScytaleCipher
{
    public string Encrypt(string text, int d)
    {
        var k = text.Length % d;
        if (k > 0)
        {
            //дополняем строку пробелами
            text += new string(' ', d - k);
        }

        var column = text.Length / d;
        var result = "";

        for (int i = 0; i < column; i++)
        {
            for (int j = 0; j < d; j++)
            {
                result += text[i + column * j].ToString();
            }
        }

        return result;
    }

    public string Decrypt(string text, int d)
    {
        var column = text.Length / d;
        var symbols = new char[text.Length];
        int index = 0;
        for (int i = 0; i < column; i++)
        {
            for (int j = 0; j < d; j++)
            {
                symbols[i + column * j] = text[index];
                index++;
            }
        }

        return string.Join("", symbols);
    }
}

class Program
{
    static void Main(string[] args)
    {
        var scytale = new ScytaleCipher();
        Console.Write("Введите текст сообщения: ");
        var message = Console.ReadLine();
        Console.Write("Введите диаметр цилиндра: ");
        var diameter = Convert.ToInt32(Console.ReadLine());
        var encText = scytale.Encrypt(message, diameter);
        Console.WriteLine("Зашифрованный текст: {0}", encText);
        Console.WriteLine("Расшифрованный текст: {0}", scytale.Decrypt(encText, diameter));
        Console.ReadLine();
    }
}
programm.top
 
Последнее редактирование:
Верх