class SimpleSubstitution: def __init__(self): self.p_alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' self.decrypting = False def cipher_alphabet(self, password): ''' (str) -> str Retorna um alfabeto cifrado iniciado com o texto da palavra chave password ''' c_alphabet = [] password = password.upper() for ch in password: if ch not in c_alphabet: c_alphabet.append(ch) idx = self.p_alphabet.find(ch) p_alphabet = self.p_alphabet[idx:] + self.p_alphabet[:idx] for ch in p_alphabet: if ch not in c_alphabet: c_alphabet.append(ch) return ''.join(c_alphabet) def encrypt(self, plaintext, password): '''(str, str) -> str Retorna o texto plano cifrado com a cifra de substituicao com a palavra chave password ''' txt = '' p_alphabet = self.p_alphabet text = plaintext.replace(' ', '').upper() cipher = self.cipher_alphabet(password) if self.decrypting: p_alphabet, cipher = cipher, p_alphabet self.decrypting = False for ch in text: txt += cipher[p_alphabet.find(ch)] return txt def decrypt(self, ciphertext, password): '''(str, str) -> str Retorna o texto cifrado decifrado com a cifra de substituicao com a palavra chave password ''' self.decrypting = True return self.encrypt(ciphertext, password)