Шифр Атбаш – простой метод шифрования с помощью подстановки, для алфавитного письма.
Описание алгоритма
Алгоритм шифрования заключается в замене k-го символа алфавита символом с порядковым номером n - k + 1, где n – количество символов в алфавите.
Таблица замены символов для английского языка:
Символ | A | B | C | D | E | F | G | H | I | J | K | L | M |
Шифр | Z | Y | X | W | V | U | T | S | R | Q | P | O | N |
Символ | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
Шифр | M | L | K | J | I | H | G | F | E | D | C | B | A |
Реализация Атбаш шифрования
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();
}
}
Изменив строку алфавита, можно расширить количество поддерживаемых символов или реализовать шифрование текста для любого языка.
Результат работы программы: