Você está na página 1de 4

Introdução

A comunicação segura de dados é um aspecto crucial em muitos sistemas, principalmente


quando se trata de troca de informações sensíveis ou confidenciais. Neste artigo,
apresentaremos um sistema simples de comunicação criptografado utilizando sockets em
Python. O objetivo é fornecer um exemplo básico de como criar um sistema de envio e
recebimento de arquivos, bem como criptografar e descriptografar mensagens.

O sistema consiste em duas partes: o cliente e o servidor. O cliente tem a opção de criar
dicionários de criptografia, criptografar e descriptografar mensagens, bem como enviar e
receber arquivos do servidor. O servidor, por sua vez, recebe os dados do cliente, salva os
arquivos enviados e responde às requisições de download.

Servidor:
O servidor é implementado como uma classe Ponte, que herda de threading.Thread. Cada
cliente é tratado em uma thread separada, permitindo que o servidor atenda várias
conexões simultaneamente. O servidor aceita comandos de UPLOAD (enviar arquivo) e
DOWNLOAD (baixar arquivo).

Cliente:
O programa é uma aplicação de transferência de arquivos e criptografia simétrica. Ele permite que o
usuário envie e baixe arquivos para um servidor remoto e também criptografar e descriptografar
mensagens usando dicionários de criptografia.

O usuário ao executar o programa tentara se conectar ao servidor, uma vez conectado o usuário pode
escolher entre várias opções no menu do programa:

1. Criar dicionário de criptografia:


Você pode criar um ou mais dicionários de criptografia para usar no processo de codificação e
decodificação das mensagens. Escolha a quantidade de dicionários que deseja criar e defina o
número mínimo e máximo de dígitos para cada dicionário e escolha o nome do arquivo onde
ficará salvo os dicionários. Os dicionários gerados serão usados para associar caracteres a
sequências binárias.

2. Criptografia:
Para criptografar uma mensagem, o programa utiliza os dicionários de criptografia
previamente criados. O dicionário é uma estrutura que mapeia cada caractere (letras
maiúsculas, minúsculas, números, caracteres acentuados, pontuações e espaços) para
sequências binárias de comprimentos aleatórios.
O processo de criptografia segue os seguintes passos:
A. Para cada caractere da mensagem original:
Se o caractere for um espaço, o programa utiliza um caractere especial no dicionário
para representar os espaços. Isso é necessário para garantir que os espaços não sejam
perdidos durante a criptografia.
Caso contrário, o programa encontra o dicionário apropriado para aquele momento e
substitui o caractere da mensagem pela sequência binária correspondente presente no
dicionário.

B. A mensagem criptografada resultante será composta por sequências binárias que


representam cada caractere da mensagem original, conforme definido nos dicionários.
Dessa forma, a mensagem original é transformada em uma sequência de bits que não
é facilmente legível.

C. É importante notar que cada dicionário possui um número diferente de dígitos e cada
caractere da mensagem é criptografado utilizando um dicionário específico. Por
exemplo, na palavra 'gato', se houver 3 dicionários, o primeiro dicionário será
responsável por criptografar o 'G', o segundo dicionário criptografará o 'A', o terceiro
dicionário criptografará o 'T' e, depois disso, voltará para o primeiro dicionário para
criptografar o 'O'.

3. Descriptografia:

A descriptografia é o processo inverso da criptografia. Ela permite recuperar a mensagem


original a partir da mensagem criptografada, usando os mesmos dicionários de criptografia
criados anteriormente.
O processo de descriptografia segue os seguintes passos:

A. Para cada sequência binária na mensagem criptografada:


O programa utiliza os dicionários em uma ordem cíclica para procurar a sequência
binária correspondente ao caractere original.
Quando a sequência binária é encontrada em um dos dicionários, o programa substitui
a sequência pelo caractere correspondente.

B. A mensagem original descriptografada será composta pelos caracteres recuperados a


partir das sequências binárias presentes na mensagem criptografada.

C. Assim como na criptografia, a ordem na qual os dicionários são usados para


descriptografar as sequências binárias também pode variar entre as execuções do
programa.

É importante ressaltar que, como os dicionários são gerados aleatoriamente, a sequência


binária que representa um caractere específico pode mudar toda vez que você criar os
dicionários. Portanto, cada execução do programa pode produzir uma sequência de
criptografia diferente para a mesma mensagem.

4. Listar dicionários criados:


Essa opção permite visualizar todos os dicionários de criptografia que você criou. Você verá o
mapeamento de caracteres para sequências binárias, o que pode ser útil para entender como o
processo de criptografia funciona.

5. Baixar Arquivo: Permite ao usuário solicitar o download de um arquivo do servidor.

6. Upload de Arquivo: Permite ao usuário enviar um arquivo para o servidor.

7. Carregar Dicionário: Se o usuário tiver um arquivo com dicionários de criptografia salvos,


pode carregá-los para uso.

8. Sair: Encerra o programa.

Para a criptografia, o programa usa dicionários que são tabelas com pares de valores. Cada letra ou
caractere no texto é substituído por um valor correspondente no dicionário, tornando a mensagem
ilegível. A descriptografia reverte esse processo para obter a mensagem original.

Funcionamento Cliente-Servidor:
O programa funciona em um modelo cliente-servidor, onde o cliente é a aplicação que está sendo
executada pelo usuário, e o servidor é um programa ou computador remoto que recebe as solicitações
do cliente e responde a elas.
Quando o usuário escolhe as opções "5" ou "6" para baixar ou enviar um arquivo, respectivamente, o
cliente se conecta ao servidor e envia os comandos e dados necessários. O servidor processa essas
solicitações, realiza as ações apropriadas (por exemplo, enviar ou receber o arquivo) e responde ao
cliente com os resultados.

Essa arquitetura cliente-servidor permite que o programa seja executado em diferentes computadores,
com o cliente se comunicando com o servidor através de uma rede (como a Internet). Dessa forma, o
usuário pode transferir arquivos de e para o servidor de forma remota, desde que ambos, cliente e
servidor, estejam conectados à mesma rede e possam se comunicar entre si.

Exemplo de Uso
Vamos supor que o usuário ‘A’ escolha a opção "1" no menu para criar os dicionários de criptografia.
Ele será solicitado a inserir o número de dicionários a serem criados e os números mínimos e
máximos de dígitos para cada dicionário. Em seguida, ele será solicitado a fornecer um nome para
salvar o arquivo contendo esses dicionários

Após criar os dicionários, o usuário pode selecionar a opção "4" para visualizar os dicionários e seus
respectivos valores.

Após criar os dicionários, o usuário pode selecionar a opção "2" para criptografar uma mensagem. Ele
digita a mensagem que deseja criptografar, e o programa utiliza os dicionários criados anteriormente
para transformar a mensagem em uma versão criptografada.
Se o usuário desejar descriptografar a mensagem, ele pode selecionar a opção "3" e inserir a
mensagem criptografada. O programa usará os mesmos dicionários utilizados para criptografar e
retornará a mensagem original.

Caso o usuário ‘A’ deseje passar o dicionário para outra pessoa, ele pode utilizar a opção “6” e fazer o
upload do arquivo para o servidor. Então um cliente ‘B’ pode fazer o download do arquivo com a
opção “5” e, após isso, o usuário ‘B’ só precisa selecionar a opção "7" para carregar um dicionário
previamente salvo. Ele será solicitado a digitar o nome do arquivo que contém os dicionários. O
programa carregará os dicionários desse arquivo e os deixará disponíveis para criptografar e
descriptografar mensagens

Conclusão
Assim, o programa proporciona uma forma simples de transferência de arquivos e criptografia,
permitindo que o usuário proteja suas mensagens com segurança e faça a transferência de arquivos de
forma mais privada.

Você também pode gostar