Pular para o conteúdo
Novo

DeepSeek V4.1 Flash grátis por 7 dias: 10M tokens por dia após qualquer recarga. Até 30/11.

Como funciona

O que é a cifra de César? Um exemplo simples e por que ela não é segura

A cifra de César desloca cada letra um número fixo de posições. Cifre HELLO como KHOOR à mão, decifre de volta e veja por que ela falha.

Iniciante4 min de leituraPor NotHoly

A cifra de César é uma cifra de substituição. Ela troca cada letra por outra que fica a uma distância fixa no alfabeto. Ao deslocar cada letra três posições para frente, HELLO vira KHOOR. O nome vem de Júlio César, que, segundo a tradição, usava um deslocamento assim nas próprias mensagens. Ela é simples o bastante para fazer à mão, e é essa simplicidade que a deixa quase sem segurança.

Cifrando à mão

Escreva o alfabeto em uma linha. Na linha de baixo, escreva o mesmo alfabeto deslocado em três posições, dando a volta depois do Z:

text
Original:  ABCDEFGHIJKLMNOPQRSTUVWXYZ
Deslocado: DEFGHIJKLMNOPQRSTUVWXYZABC

Para cifrar, procure cada letra do texto original na linha de cima e copie a letra que está logo abaixo. H vira K, E vira H, L vira O e O vira R. Assim, HELLO vira KHOOR. A chave é o número de posições deslocadas, que aqui é 3.

Espaços, números e pontuação não fazem parte do alfabeto de A a Z. Em uma versão didática, eles podem ficar como estão, e é isso que o código Python abaixo faz.

Decifrando

Decifrar é ler a mesma tabela ao contrário. Desloque cada letra três posições para trás, o que é igual a deslocar 23 posições para frente:

text
KHOOR  →  HELLO

Para uma chave dada, cada letra do texto original corresponde a exatamente uma letra cifrada, e o caminho de volta também é único. Por isso a cifra pode ser desfeita quando você conhece a chave.

Deslocamentos negativos e grandes

O alfabeto inglês tem 26 letras, então os deslocamentos se repetem a cada 26 posições. Um deslocamento de 29 faz o mesmo que um deslocamento de 3:

text
29 mod 26 = 3

Um deslocamento de −3 faz o mesmo que um de 23. Ao escrever código, use o resto da divisão por 26 para que qualquer número inteiro funcione.

Uma versão curta em Python

Esta função desloca apenas as letras de A a Z e de a a z, deixa o restante como está e dá a volta com módulo 26. Ela usa ord e chr para converter entre letras e números:

python
def caesar(text, shift):
    out = []
    for ch in text:
        if ch.isascii() and ch.isalpha():
            base = ord('A') if ch.isupper() else ord('a')
            out.append(chr((ord(ch) - base + shift) % 26 + base))
        else:
            out.append(ch)
    return ''.join(out)

print(caesar("HELLO", 3))
print(caesar("KHOOR", -3))
print(caesar("KHOOR", 23))
print(caesar("HELLO", 29))
print(caesar("ATTACK AT DAWN", 3))
print(caesar(caesar("Hello, World!", 13), 13))
print(caesar("Hello, World!", 13))
print(caesar("hello, world", 3))
print(caesar("KHOOR", 26 - 3) == caesar("KHOOR", -3))
print(sum(1 for s in range(1, 26) if caesar("KHOOR", s) == "HELLO"))
print(caesar("HELLO", 3) == caesar("HELLO", 29))

Saída ao executar esse script:

text
KHOOR
HELLO
HELLO
KHOOR
DWWDFN DW GDZQ
Hello, World!
Uryyb, Jbeyq!
khoor, zruog
True
1
True

A saída confirma as seções anteriores. Os deslocamentos −3 e 23 coincidem, assim como 3 e 29. Entre os deslocamentos de 1 a 25, só um transforma KHOOR de volta em HELLO. Aplicar o deslocamento 13 duas vezes devolve o texto original, que é o caso do ROT13 descrito abaixo.

Por que a cifra de César não é segura

Com um alfabeto de 26 letras, só 25 deslocamentos mudam o texto. Um atacante pode testar todos e ver qual resultado é legível. Para textos em inglês, o resultado legível é fácil de reconhecer, então o ataque quase não exige esforço.

A frequência das letras também sobrevive ao deslocamento. Em inglês, E é comum e Z é raro, então um texto cifrado em que uma letra aparece muito mais que as outras já é uma pista forte. Mesmo sem testar todos os deslocamentos, a contagem das letras aponta a chave.

A cifra serve para aprender o vocabulário da criptografia: texto original, texto cifrado, chave, substituição e força bruta. Ela não deve proteger senhas, dados de clientes, chaves de API ou arquivos privados. A criptografia real usa algoritmos padronizados, chaves bem geradas e uma gestão rigorosa dessas chaves. O verbete de criptografia no glossário do NIST traz as definições formais da área.

Cifra de César e ROT13

ROT13 é uma cifra de César com deslocamento 13. Ela é a própria inversa: aplicá-la duas vezes devolve o texto original, porque 13 + 13 = 26 e uma volta completa no alfabeto não muda nada. O ROT13 de Hello, World! é Uryyb, Jbeyq!, como mostrado acima.

O ROT13 é usado para esconder spoilers ou finais de piadas de um olhar rápido. Ele não oferece proteção real, porque quem conhece o método lê o texto em segundos.

Teste você mesmo

Cifre ATTACK AT DAWN à mão com deslocamento 3, mantendo os espaços. Compare sua resposta com esta:

text
DWWDFN DW GDZQ

Depois, mude o deslocamento na função Python e execute-a com o mesmo texto. Teste deslocamento 0, 26 e 13, e preveja cada resultado antes de rodar. Use textos sintéticos ou seus, e mantenha o exercício na sua própria máquina.

Quando estiver pronto, o próximo artigo, Cifra de César em Python, parte dessa função e acrescenta entrada de dados e testes.

Leitura complementar: o verbete de criptografia no glossário do NIST e a documentação do Python sobre ord e chr.

Fontes

  1. NIST Cryptography Glossary
  2. Python documentation: Built-in Functions (ord, chr)

Mais em Criptografia

Criptografia

Senhas e hash com Argon2id

Por que hashes rápidos falham em senhas, o que fazem o salt e o fator de trabalho, e como gerar e verificar hashes com Argon2id em Python.

Intermediário11 min de leitura