""" ============================================================================ PHM Open Source — Cibersegurança & Criptografia Clássica Algoritmo 02: Cifra de César & Cifra de Vigenère Didática em Python Autor: Prof. Paulo Henrique Maciel · PHM Tech ============================================================================ OBJETIVO DIDÁTICO: Aprender os princípios históricos da criptografia por substituição: 1. Cifra de César: Rotação simples com deslocamento modular k (k mod 26). 2. Cifra de Vigenère: Substituição polialfabética utilizando uma palavra-chave. COMO EXECUTAR: python 02_cifra_cesar_e_vigenere.py ============================================================================ """ def cifra_cesar(texto: str, deslocamento: int, modo: str = 'cifrar') -> str: """Aplica a Cifra de César no texto fornecido.""" if modo == 'decifrar': deslocamento = -deslocamento resultado = [] for char in texto: if char.isalpha(): base = ord('A') if char.isupper() else ord('a') novo_char = chr((ord(char) - base + deslocamento) % 26 + base) resultado.append(novo_char) else: resultado.append(char) return ''.join(resultado) def cifra_vigenere(texto: str, chave: str, modo: str = 'cifrar') -> str: """Aplica a Cifra de Vigenère polialfabética.""" resultado = [] chave = chave.upper() idx_chave = 0 for char in texto: if char.isalpha(): deslocamento = ord(chave[idx_chave % len(chave)]) - ord('A') if modo == 'decifrar': deslocamento = -deslocamento base = ord('A') if char.isupper() else ord('a') novo_char = chr((ord(char) - base + deslocamento) % 26 + base) resultado.append(novo_char) idx_chave += 1 else: resultado.append(char) return ''.join(resultado) if __name__ == '__main__': print("=" * 60) print(" PHM TECH — CRIPTOGRAFIA CLASSICA (CESAR & VIGENERE) ") print("=" * 60 + "\n") mensagem_original = "Aprender programacao liberta o pensamento!" deslocamento_cesar = 3 chave_vigenere = "EDUCACAO" print(f"Mensagem Original: '{mensagem_original}'\n") # 1. Teste da Cifra de César cifrado_cesar = cifra_cesar(mensagem_original, deslocamento_cesar, 'cifrar') decifrado_cesar = cifra_cesar(cifrado_cesar, deslocamento_cesar, 'decifrar') print("[1] Cifra de César (Deslocamento = 3):") print(f" -> Cifrado : {cifrado_cesar}") print(f" -> Decifrado : {decifrado_cesar}\n") # 2. Teste da Cifra de Vigenère cifrado_vig = cifra_vigenere(mensagem_original, chave_vigenere, 'cifrar') decifrado_vig = cifra_vigenere(cifrado_vig, chave_vigenere, 'decifrar') print(f"[2] Cifra de Vigenère (Chave = '{chave_vigenere}'):") print(f" -> Cifrado : {cifrado_vig}") print(f" -> Decifrado : {decifrado_vig}\n")