Примечание. Разве это не Vigenère (не Vernam)?
Если это Vigenère, вам просто нужно правильно определить, какой у вас входной алфавит.На самом деле в вашем коде есть строчные буквы алфавита (az), поэтому код Vigenère выглядит примерно так:
abcdefghijklmnopqrstuvwxyz
aabcdefghijklmnopqrstuvwxyz
bbcdefghijklmnopqrstuvwxyza
ccdefghijklmnopqrstuvwxyzab
...
Просто добавьте свои цифры в любом месте кода:
abcdefghijklmnopqrstuvwxyz0123456789
aabcdefghijklmnopqrstuvwxyz0123456789
bbcdefghijklmnopqrstuvwxyz0123456789a
ccdefghijklmnopqrstuvwxyz0123456789ab
...
--- EDIT ---
Вам может понадобиться добавить еще один небольшой слой, который позволит вам определить свой входной алфавит.Итак, определите массив, содержащий все рассматриваемые буквы в заданном порядке (выберите одно), скажем:
Alphabet[] = "0123456789abcdefghijklmnopqrstuvwxyz";
Теперь представьте, что у вас есть функция, в которой заданная буква даст вам ранг в алфавите: скажем, rank(l)
, например rank('b')=11
.
Теперь вычислите (нет необходимости в такой структуре, но давайте сделаем это, как вы) ваши перестановки:
Perms[][]
00 01 02 03 04 05 .... 35
00 00 01 02 03 04 05 .... 35
01 01 02 03 04 05 .... 35 00
02 02 03 04 05 .... 35 00 01
...
Теперь для заданной ключевой буквыk
и письмо с письмом l
Вы можете вычислить зашифрованную букву e
как:
e = Alphabet[Perms[rank(l)][rank[k]]