Skip to content

1.1

Choose a tag to compare

@LuizWT LuizWT released this 23 Apr 02:04
· 10 commits to main since this release
60a61e0

CryptoMatrix

Sistema de Criptografia por Matriz com Chave Compartilhada

1. Visão Geral

Esse código implementa um sistema simples de criptografia e decriptação baseado na geração de uma matriz quadrada embaralhada contendo as letras do alfabeto (com acréscimo da letra "Ç"). A matriz é gerada de forma determinística a partir de uma chave compartilhada, permitindo que tanto a parte que criptografa quanto a parte que descriptografa possam reproduzir exatamente a mesma configuração.

Cada caractere da mensagem é representado pela posição (linha e coluna) em que ocorre na matriz. Quando um caractere se repete, uma posição diferente é escolhida para criptografia. Para os espaços, o sistema utiliza tokens especiais: cada token é formado por um prefixo aleatório (qualquer letra de A-Z, exceto Ç) seguido por dois dígitos aleatórios, facilitando sua identificação durante a decriptação.

2. Dependências e Considerações

  • Módulos Utilizados:
    • random: Para gerar números aleatórios e embaralhar a lista de caracteres.
    • string: Para acessar a constante ascii_uppercase, que fornece as letras maiúsculas de A-Z.
  • Uso da Chave: A chave fornecida pelo usuário é usada para definir a SEED do gerador de números aleatórios (random.seed(key)), garantindo que a matriz gerada seja a mesma para uma mesma chave em processos distintos.
  • Aplicações Reais:
    • Comunicação segura entre partes que compartilham uma chave secreta.
    • Criação de puzzles ou desafios de criptografia.
    • Implementações educacionais para introdução aos conceitos de substituição de caracteres e criptografia simétrica com matriz.

3. Explicação Detalhada do Código

3.1 Função generate_matrix



Objetivo e Funcionamento:

  • Entrada: key (chave para definir o estado do gerador aleatório) e size (dimensão da matriz quadrada, padrão 7).
  • Processamento:
    1. Cria base_alphabet contendo letras A–Z e a letra "Ç".
    2. Define a semente do gerador aleatório com random.seed(key) para garantir determinismo.
    3. Inicializa matrix_list com uma cópia de base_alphabet, assegurando ao menos uma de cada letra.
    4. Duplica base_alphabet até que matrix_list tenha pelo menos size×size elementos.
    5. Embaralha matrix_list e trunca para o tamanho exato de size×size.
    6. Verifica letras faltantes em matrix_list e substitui posições duplicadas para garantir presença de todas as letras.
    7. Divide matrix_list em sublistas de comprimento size, formando a matriz final.
  • Saída: Retorna a matriz gerada — uma lista de listas (list[list[str]]) com size linhas e size colunas.

3.2 Função print_matrix



Objetivo e Funcionamento:

  • Entrada: matrix (a matriz gerada).
  • Processamento: Percorre cada linha da matriz e imprime o número da linha e os caracteres, separados por espaços.
  • Saída: Exibição da matriz no console de forma organizada.

3.3 Função encrypt



Objetivo e Funcionamento:

  • Entrada: message (mensagem a ser criptografada) e matrix.
  • Processamento:
    1. Inicializa a string encrypted.
    2. Constrói positions_full mapeando cada caractere da matriz para suas posições (linha, coluna).
    3. Cria positions_pool como uma cópia de positions_full para gerenciar as posições usadas.
    4. Para cada caractere da mensagem (em maiúsculas):
      • Se for espaço, gera um token com um prefixo aleatório (A-Z) e dois dígitos aleatórios (entre 11 e 77).
      • Para outros caracteres, seleciona e remove uma posição aleatória da pool; se esgotada, reinicializa a pool.
  • Saída: Mensagem criptografada, composta por tokens representando as posições ou espaços.

3.4 Função decrypt



Objetivo e Funcionamento:

  • Entrada: encrypted_text: texto criptografado; matrix: matriz utilizada na criptografia.
  • Processamento:
    • Verifica, token por token, se representa um espaço (token de 3 caracteres) ou um caractere da matriz (token de 2 dígitos).
    • Converte os tokens de 2 dígitos em índices para recuperar o caractere correspondente da matriz.
  • Saída: Retorna a mensagem original descriptografada.

3.5 Função validate_message



Objetivo e Funcionamento:

  • Entrada: msg (Mensagem que será validada pela função antes de ser criptografada).
  • Processamento:
    1. Aplica re.fullmatch(r"[A-ZÇ ]+", msg) para verificar se msg contém apenas:
      • Letras maiúsculas A–Z
      • Cedilha Ç
      • Espaços
    2. Retorna True se corresponder ao padrão, caso contrário False.
  • Saída: bool — True para mensagem válida; False caso haja qualquer outro caractere.

3.6 Função clear_terminal



Objetivo e Funcionamento:

  • Entrada: nenhuma.
  • Processamento:
    1. Verifica o sistema operacional via os.name:
      • Se for 'nt', executa cls (Windows).
      • Senão, executa clear (Linux/macOS).
    2. Chama os.system com o comando apropriado para limpar o terminal.
  • Saída: nenhuma (efeito colateral no terminal).

3.7 Função main



Objetivo e Funcionamento:

  • Solicita a chave e gera a matriz determinística.
  • Exibe a matriz e solicita a mensagem a ser criptografada.
  • Criptografa a mensagem e exibe o resultado.
  • Descriptografa a mensagem e exibe a mensagem original.
  • O bloco if __name__ == "__main__": garante que a função main seja executada apenas quando o script for chamado diretamente.

4. Possíveis Aplicações em Cenários Reais

  • Comunicação Segura: Permite o envio de mensagens criptografadas entre partes que compartilham uma chave secreta.
  • Desafios e Puzzles: Pode ser adaptado para criar enigmas ou desafios onde os jogadores precisam descobrir a chave para interpretar uma mensagem oculta.
  • Ensino: Ideal para uso didático, introduzindo conceitos de criptografia por substituição e uso de chaves compartilhadas.

5. Observações Finais

  • A utilização de tokens especiais para espaços, com prefixos aleatórios (de A-Z), torna a mensagem criptografada menos previsível.
  • A reinicialização da pool de posições garante que mensagens com muitas repetições de um mesmo caractere possam ser criptografadas sem perder a diversidade de posições.

Instalação

Important

Requer Python 3.6 ou superior para garantir compatibilidade total com os recursos utilizados no código

Clone o repositório:

git clone https://github.com/seu-usuario/CryptoMatrix.git

Acesse o diretório:

cd CryptoMatrix/

Execute a ferramenta:

python3 cryptoMatrix.py

Apoio ao Projeto

Se você quiser contribuir com o projeto, sinta-se à vontade para abrir Issues ou fazer Pull Requests.


Este projeto está licenciado sob a GNU Affero General Public License v3.0 (Modificada)