Шифр Атбаш – простий метод шифрування за допомогою підстановки, для алфавітного письма.
Опис алгоритму
Алгоритм шифрування полягає в заміні 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();
}
}
Змінивши рядок алфавіту, можна розширити кількість підтримуваних символів, або реалізувати шифрування тексту для іншої мови.
Результат роботи програми: