Шифр Виженера - скрипт выводит неправильный результат

Проблема в том, что код работает, но выдает неправильный результат.

Пример для шифра Виженера:

Если мы возьмем слово «CODE» в качестве ключа и зашифруем слово «TABLET», то нужно сместить каждую букву следующим образом:
● «T» смещена на «C» (сдвиг на 2 позиции) и заменяется «V»
● «A» смещена на «O» (сдвиг на 14 позиций) и заменяется «O»
● «B» смещена на «D» (сдвиг на 3 позиции) и заменяется «E»
● «L» смещена на «E» (сдвиг на 4 позиции) и заменяется «P»
● «E» смещена на «C» (сдвиг на 2 позиции) и заменяется «G»
● «T» смещена на «O» (сдвиг на 14 позиций) и заменяется «H»

alphabet = 'abcdefghijklmnopqrstuvwxyz'
s = input("слово для шифрования(латиница) - ")
key = input("ключ - ")
res,j = '',0
for i in range(len(s)):
   res += alphabet[(alphabet.index(s[i]) + alphabet.index(key[j])) % len(s)]
   if j == len(key)-1: j = 0
   else: j += 1
print(res)

Вывод:

Слово для шифрования(латиница) - java
    ключ - code
    dcaa

Ожидаемый результат loye, а не dcaa.


Ответы (1 шт):

Автор решения: splash58

Вы не совсем правильно работаете с модулями. И обрезать надо на длину алфавита, а не на длину слова.

for x in s:
   res += alphabet[(alphabet.index(x) + alphabet.index(key[j])) % (len(alphabet)-1)]
   j = (j+1) % (len(key)-1)
→ Ссылка