Я пытаюсь создать небольшое программное обеспечение, которое выполняет аффинный шифр, что означает, что K1 и количество букв в алфавите (используя m для этого числа) должны быть взаимно простыми. , то есть gcd(k1, m) == 1
.
В основном это так:
У меня есть открытый текст: привет
У меня К1: 7
У меня К2: 5
Открытый текст в числовом формате: 8 5 25
8 - от h (позиция в алфавите) и **5 25** идет одинаково для e и y
Зашифровано: 7 13 18
Какая формула:
k1 * 8 + k2 по модулю 27 = 7
k1 * 5 + k2 по модулю 27 = 13
1 лиц * 25 + лиц 2 по модулю 27 = 18
У меня есть функция, которая шифрует это, но я не знаю, как расшифровать.
Например у меня 7 для h. Я хочу снова получить число 8, зная 7, k1 и k2.
У вас есть идеи?
Некоторая функция, в которой вы вводите k1, k2, результат (например, 7 для h), и она возвращает мне 8, но я действительно не знаю, как это изменить.
Функция шифрования такова:
public List<int> get_crypted_char(string[] strr)
{
List<int> l = new List<int>();
int i;
for (i = 0; i < strr.Length; i++)
{
int ch = int.Parse(strr[i]);
int numberback = k1 * ch + 5;
numberback = (numberback % 27);
l.Add(numberback);
}
return l;
}
Где: string[] strr — это строка, содержащая открытый текст. Пример функции: get_crypted_char({"e","c","b"})
Результатом будет такой список {"5","3","2"}
ОБНОВЛЕНИЕ: Вот ссылка из википедии об этом шифровании, а также о расшифровке, но... я не очень понимаю, "как" http://en.wikipedia.org/wiki/Affine_cipher
8 mod 3
и5 mod 3
равны2
. - person Jensen   schedule 30.10.201361 mod 27 = 7
, а также34 mod 27 = 7
или даже7 mod 27 = 7
. Так как же узнать, какая из миллиона возможностей является правильной? - person Giannis Paraskevopoulos   schedule 30.10.2013