Атбаш шифрування

Шифр Атбаш – простий метод шифрування за допомогою підстановки, для алфавітного письма.

Опис алгоритму

Алгоритм шифрування полягає в заміні k-го символу алфавіту символом з порядковим номером n - k + 1, де n – загальна кількість символів алфавіту.

Таблиця заміни символів для англійської мови:

СимволABCDEFGHIJKLM
ШифрZYXWVUTSRQPON
СимволNOPQRSTUVWXYZ
ШифрMLKJIHGFEDCBA

Реалізація Атбаш шифрування

using System;

//Атбаш
public class Atbash
{
    //алфавіт мови
    private const string alphabet = "abcdefghijklmnopqrstuvwxyz";
    
    //метод для перевороту рядка
    private string Reverse(string inputText)
    {
        //змінна для зберігання результату
        var reversedText = string.Empty;
        foreach (var s in inputText)
        {
            //додаємо символ на початок рядка
            reversedText = s + reversedText;
        }

        return reversedText;
    }

    //метод шифрування/розшифрування
    private string EncryptDecrypt(string text, string symbols, string cipher)
    {
        //переводимо текст в нижній регістр
        text = text.ToLower();

        var outputText = string.Empty;
        for (var i = 0; i < text.Length; i++)
        {
            //пошук позиції символа в рядку алфавіту
            var index = symbols.IndexOf(text[i]);
            if (index >= 0)
            {
                //заміна символа на шифр
                outputText += cipher[index].ToString();
            }
        }

        return outputText;
    }

    //шифрування тексту
    public string EncryptText(string plainText)
    {
        return EncryptDecrypt(plainText, alphabet, Reverse(alphabet));
    }

    //розшифрування тексту
    public string DecryptText(string encryptedText)
    {
        return EncryptDecrypt(encryptedText, Reverse(alphabet), alphabet);
    }
}

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Атбаш шифрування");
        var atbash = new Atbash();
        Console.Write("Введіть текст повідомлення: ");
        var message = Console.ReadLine();
        var encryptedMessage = atbash.EncryptText(message);
        Console.WriteLine("Зашифроване повідомлення: {0}", encryptedMessage);
        var decryptedMessage = atbash.DecryptText(encryptedMessage);
        Console.WriteLine("Розшифроване повідомлення: {0}", decryptedMessage);
        Console.ReadLine();
    }
}

Змінивши рядок алфавіту, можна розширити кількість підтримуваних символів, або реалізувати шифрування тексту для іншої мови.

Результат роботи програми:

Дивіться також: