Дешифровать можно и по-моему даже нужно.
HashMap - тоже вариант, но смотрится слишком топорно.
12*6015%26 = 4
6015%26 = 9следовательно ключ = 9 полностью заменяет ключ 6015 и будет удобнее ждя последующих расчетов
12*9%26 = 4
модулярная арифметика говорит,
что ключ обратного преобразования
(26*1 + 1 )/ 9 = 3 - делится на 9 без остатка12*9%26 = 4 > 4*3%26 = 12
4*9%26 = 10 > 10*3%26 = 4
17*9%26 = 23 > 23*3%26 = 17
Теперь пусть ключ 50575057%26 =
13 - оптимизированный ключ имеет общее основание с 26, равное 13 (как и 5057) и является некорректным - на выходе кодирования будут дубли
:12*13%26 = 0
4*13%26 = 0
5*13%26 = 13
17*13%26 = 13
Теперь пусть ключ 50675067%26 = 23. У 23 нет общих оснований с 26, ключ корректный.
Ищем обратнвй ключ
(26*1 + 1) / 23 - не делится
(26*2 + 1) / 23 - не делится
...
(26*15 + 1) / 23 = 17 делится без остатка
encode > decode
12*23%26 = 16 > 16*17%26 = 12
4*23%26 = 14 > 14*17%26 = 4
5*23%26 = 11 > 11*17%26 = 5
17*23%26 = 1 > 1*17%26 = 17
Найти общий делитель на Java для проверок ключа и поиска обратного ключа можно одним из следующих способов