#1 CAESAR CIPHER

Mundo DevOps
4 min readMar 18, 2023

BRINCANDO COM PYTHON…

Uma série de pequenos projetos para aprofundar o entendimento sobre essa fantástica ferramenta que é o python.

# CAESAR CIPHER

Vamos aprender um pouco sobre criptografia e inicaremos com a famosa criptografia do Caesar. Para saber mais segue o link:

https://pt.wikipedia.org/wiki/Cifra_de_C%C3%A9sar

1- Abra o prompt/cmd/bash e digite o seguinte comando para criar um diretório, segue o comando abaixo:

mkdir python_project caesar_cipher && cd caesar_cipher

2- Crie um arquivo para o nosso pequeno projeto, segue o comando abaixo:

touch caesar_cipher.py
  • Abra o file no seu Editor de texto.
  • OBS: A cifra de César é uma antiga criptografia
    algoritmo de ação usado por Júlio César. Isto
    criptografa as letras, deslocando-as por um
    certo número de casas no alfabeto. Por exemplo, se o
    chave é 3, então A torna-se D, B torna-se E, C torna-se
    F, e assim por diante. Para descriptografar a mensagem, você deve mudar as letras criptografadas na direção oposta. Esse
    programa permite ao usuário criptografar e descriptografar mensagens
    de acordo com este algoritmo.

Como funciona?

Como a maioria dos programas de cifra(cipher), a cifra(cipher) de César funciona traduzindo caracteres em números, realizando algumas operações matemáticas e traduzindo de volta em caracteres de texto. No contexto das cifras(cipher), chamamos esses caracteres de texto de símbolos. Os símbolos podem incluir letras, dígitos numéricos e sinais de pontuação, cada um dos quais recebe um número inteiro exclusivo. No caso do programa da cifra(cipher) de César, os símbolos são todos letras e seus números inteiros são suas posições na string symbols =
‘A B C D E F G H I J K L M N O P Q R S T U V W X Y Z’.

  • INSTALAR OS SEGUINTES PACOTES:
pip3 install PySide6
pip3 install pyperclip

3- Segue o código abaixo:

try:
import pyperclip
except ImportError:
pass

symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

print("A Caesar Cipher criptografa as letras substituindo por uma")
print("key que é um número. Por exemplo, uma key 2 significa que a letra A é")
print("criptografada em C, a letra B criptografada em D e assim por diante.")
print()

while True:
print('Você quer descriptografar(d) ou encriptografar(e)')
response = input('> ').lower()
if response.startswith('e'):
mode = 'encrypt'
break
elif response.startswith('d'):
mode = 'decrypt'
break
print("Digite uma letra e ou d.")

while True:
maxKey = len(symbols) - 1
print(f"Digite uma key(número) 0 até {maxKey} ")
response = input('> ').upper()
if not response.isdecimal():
continue

if 0 <= int(response) < len(symbols):
key = int(response)
break

print(f"Digite a mensagem que deseja encriptografar/descriptografar: {mode}")

message = input('> ')

message = message.upper()

translated = ''

for symbol in message:
if symbol in symbols:

num = symbols.find(symbol)

if mode == 'encrypt':
num = num + key
elif mode == 'decrypt':
num = num - key


if num >= len(symbols):
num = num - len(symbols)
print(num)
elif num < 0:
num = num + len(symbols)
print(num)

translated = translated + symbols[num]
else:
translated = translated + symbol

print(translated)

if mode == "encrypt":
print(f"Criptografia: {translated}\nkey: {response}")
else:
print(f"Descriptografia: {translated}\nkey: {response}")

try:
pyperclip.copy(translated)
print(f"Texto {mode}ed foi copiado.")
except:
pass

Entendendo o código:

while True: 
print('Você quer descriptografar(d) ou encriptografar(e)')
response = input('> ').lower()
if response.startswith('e'):
mode = 'encrypt'
break
elif response.startswith('d'):
mode = 'decrypt'
break
print("Digite uma letra e ou d.")
  • Enquanto a condição for True o while irá executar, simples assim!
  • Se for escolhido e irá criptografar o texto, se for d irá descriptografar.
while True:
maxKey = len(symbols) - 1
print(f"Digite uma key(número) 0 até {maxKey} ")
response = input('> ').upper()
if not response.isdecimal():
continue

if 0 <= int(response) < len(symbols):
key = int(response)
break

print(f"Digite a mensagem que deseja encriptografar/descriptografar: {mode}")
  • maxKey é o tamanho do nosso array symbols percorrendo da direita para esquerda, ou seja, do último elemento para o primeiro.
  • response recebe o input do número.
  • O número não pode ser decimal e a key não pode ser menor que zero e maior que o array do alfabeto, variável symbols.
  • print irá mostrar a nossa palavra ou frase para criptografar ou descriptografar.
for symbol in message:
if symbol in symbols:
num = symbols.find(symbol)
if mode == 'encrypt':
num = num + key
elif mode == 'decrypt':
num = num - key
  • num = symbols.find(symbol): vai identificar a posição de cada letra no alfabeto.
  • Se for escolhido encrypt: posição + quantas posições vai se deslocar de acordo com a key inserida.
  • Exemplo key = 1 e ABCD é a palavra escolhida. Oresultado vai ser BCDE, porque cada letra andou uma posição e foi sendo substituida pela letra seguinte. A foi substituída por B, B foi substituida por C, C substituida por D e D substituida por E. Descolando-se uma casa, igual quando mudamos de posição os elementos no array.
  • Se for decrypt irá fazer o inverso. A substitui o B, B substitui o C, C substitui o D, D substitui o E, ficando ABCD.
if num >= len(symbols):
num = num - len(symbols)
print(num)
elif num < 0:
num = num + len(symbols)
print(num)


translated = translated + symbols[num]

else:

translated = translated + symbol

print(translated)
  • Se for escolhido um número maior que o array o num-len(array) irá diminuir o tamanho do número escolhido. Se for menor que o array irá somar com o num+len(array).
  • translated recebe o valor da palavra criptografada ou descriptografada, segue o exemplo:
B
C
D
E
  • translated= transleted+symbol junta cada letra que foi criptografada ou descriptografada.
if mode == "encrypt":
print(f"Criptografia: {translated}\nkey: {response}")
else:
print(f"Descriptografia: {translated}\nkey: {response}")

try:
pyperclip.copy(translated)
print(f"Texto {mode}ed foi copiado.")
except:
pass
  • Se a escolha foi encrypt: mostrará a nossa criptografia, senão mostrará a descrypt.
  • pyperclip.copy(translated) copia a palavra ou frase.

Fique atento que nessa série de pequenos projetos, vamos fazer mais de 20 e após esse terá um CAESAR CIPHER com mais robustes, qualidade no código. Fui!!!!!!!!!!!!!!!!!

--

--

Mundo DevOps

Mostrar o mundo da cultura Front-End descrevendo sua aplicação no dia a dia. Com solução de problemas e projetos. ✌️😎