0% acharam este documento útil (0 voto)
9 visualizações3 páginas

Chat TCP com Cifra de César Python

O documento descreve um sistema de chat TCP que utiliza a cifra de César para cifrar mensagens. O servidor e o cliente são implementados em Python, permitindo comunicação entre máquinas, com um shift padrão de 3 que pode ser alterado. É um exemplo educacional, recomendando o uso de criptografia mais robusta para aplicações reais.

Enviado por

gamertoddy123456
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
9 visualizações3 páginas

Chat TCP com Cifra de César Python

O documento descreve um sistema de chat TCP que utiliza a cifra de César para cifrar mensagens. O servidor e o cliente são implementados em Python, permitindo comunicação entre máquinas, com um shift padrão de 3 que pode ser alterado. É um exemplo educacional, recomendando o uso de criptografia mais robusta para aplicações reais.

Enviado por

gamertoddy123456
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

# TCP Chat com Cifra de César

Instruções de uso
1) Inicie o servidor:
python [Link]
(Por padrão escuta em [Link]:5000 com shift=3)

2) Inicie um cliente em outra máquina/terminal:


python [Link] <host> <port> <shift>
Exemplo:
python [Link] [Link] 5000 3

3) No cliente, digite mensagens e pressione Enter para enviar.


Digite /quit ou pressione Ctrl+C para sair.

Notas:
- As mensagens são cifradas com uma cifra de César simples antes de serem enviadas.
- O shift padrão é 3, mas você pode alterar no servidor e no cliente (devem concordar).
- Este é um exemplo educacional; para uso real, utilize criptografia robusta (TLS).

--- SERVER ([Link]) ---

# [Link]
import socket
import threading

# Simple Caesar cipher


def caesar_encrypt(text, shift=3):
result = []
for ch in text:
if 'a' <= ch <= 'z':
[Link](chr((ord(ch) - ord('a') + shift) % 26 + ord('a')))
elif 'A' <= ch <= 'Z':
[Link](chr((ord(ch) - ord('A') + shift) % 26 + ord('A')))
else:
[Link](ch)
return ''.join(result)

def caesar_decrypt(text, shift=3):


return caesar_encrypt(text, -shift)

def handle_client(conn, addr, shift):


print(f'Cliente conectado: {addr}')
try:
while True:
data = [Link](4096)
if not data:
break
enc = [Link]('utf-8')
dec = caesar_decrypt(enc, shift)
print(f'[{addr}] (decrypted): {dec}')
# Echo back (re-encrypted) so client sees confirmation
resp = f"Servidor recebeu: {dec}"
[Link](caesar_encrypt(resp, shift).encode('utf-8'))
except ConnectionResetError:
print('Conexão encerrada pelo cliente.')
finally:
[Link]()
print(f'Conexão com {addr} encerrada.')

def start_server(host='[Link]', port=5000, shift=3):


s = [Link](socket.AF_INET, socket.SOCK_STREAM)
[Link]((host, port))
[Link](5)
print(f'Servidor ouvindo em {host}:{port} (Caesar shift={shift})')
try:
while True:
conn, addr = [Link]()
t = [Link](target=handle_client, args=(conn, addr, shift), daemon=True)
[Link]()
except KeyboardInterrupt:
print('Servidor encerrado manualmente.')
finally:
[Link]()

if __name__ == '__main__':
# Run with: python [Link]
start_server()

--- CLIENT ([Link]) ---

# [Link]
import socket
import threading
import sys

def caesar_encrypt(text, shift=3):


result = []
for ch in text:
if 'a' <= ch <= 'z':
[Link](chr((ord(ch) - ord('a') + shift) % 26 + ord('a')))
elif 'A' <= ch <= 'Z':
[Link](chr((ord(ch) - ord('A') + shift) % 26 + ord('A')))
else:
[Link](ch)
return ''.join(result)

def caesar_decrypt(text, shift=3):


return caesar_encrypt(text, -shift)

def receive_loop(sock, shift):


try:
while True:
data = [Link](4096)
if not data:
print('Conexão encerrada pelo servidor.')
break
enc = [Link]('utf-8')
dec = caesar_decrypt(enc, shift)
print(f'<< {dec}')
except ConnectionResetError:
print('Conexão perdida.')
finally:
[Link]()

def start_client(host='[Link]', port=5000, shift=3):


sock = [Link](socket.AF_INET, socket.SOCK_STREAM)
[Link]((host, port))
print(f'Conectado a {host}:{port} (Caesar shift={shift})')
t = [Link](target=receive_loop, args=(sock, shift), daemon=True)
[Link]()
try:
while True:
msg = input()
if [Link]() in ('/quit', '/exit'):
print('Encerrando cliente.')
break
enc = caesar_encrypt(msg, shift)
[Link]([Link]('utf-8'))
except KeyboardInterrupt:
print('Encerrando cliente (CTRL+C).')
finally:
[Link]()
if __name__ == '__main__':
# Run with: python [Link]
# Optional: python [Link] <host> <port> <shift>
import sys
host = '[Link]'
port = 5000
shift = 3
if len([Link]) >= 2:
host = [Link][1]
if len([Link]) >= 3:
port = int([Link][2])
if len([Link]) >= 4:
shift = int([Link][3])
start_client(host, port, shift)

Você também pode gostar