class VigenereCipher(object): def __init__(self, key, alphabet): self.key = key self.alphabet = alphabet def encode(self, text): encoded = [] idx_key = 0 for char in text: if char in self.alphabet: text_pos = self.alphabet.index(char) key_char = self.key[idx_key % len(self.key)] key_pos = self.alphabet.index(key_char) pos = (text_pos + key_pos) % len(self.alphabet) encoded.append(self.alphabet[pos]) else: encoded.append(char) idx_key += 1 return "".join(encoded) def decode(self, text): decoded = [] idx_key = 0 for char in text: if char in self.alphabet: text_pos = self.alphabet.index(char) key_char = self.key[idx_key % len(self.key)] key_pos = self.alphabet.index(key_char) pos = (text_pos - key_pos) % len(self.alphabet) decoded.append(self.alphabet[pos]) else: decoded.append(char) idx_key += 1 return "".join(decoded)