Repository navigation
1.1
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 constanteascii_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) esize(dimensão da matriz quadrada, padrão 7). -
Processamento:
- Cria
base_alphabetcontendo letras A–Z e a letra"Ç". - Define a semente do gerador aleatório com
random.seed(key)para garantir determinismo. - Inicializa
matrix_listcom uma cópia debase_alphabet, assegurando ao menos uma de cada letra. - Duplica
base_alphabetaté quematrix_listtenha pelo menossize×sizeelementos. - Embaralha
matrix_liste trunca para o tamanho exato desize×size. - Verifica letras faltantes em
matrix_liste substitui posições duplicadas para garantir presença de todas as letras. - Divide
matrix_listem sublistas de comprimentosize, formando a matriz final.
- Cria
-
Saída: Retorna a matriz gerada — uma lista de listas (
list[list[str]]) comsizelinhas esizecolunas.
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) ematrix. -
Processamento:
- Inicializa a string
encrypted. - Constrói
positions_fullmapeando cada caractere da matriz para suas posições (linha, coluna). - Cria
positions_poolcomo uma cópia depositions_fullpara gerenciar as posições usadas. - 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.
- Inicializa a string
- 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:
- Aplica
re.fullmatch(r"[A-ZÇ ]+", msg)para verificar semsgcontém apenas: - Letras maiúsculas A–Z
- Cedilha
Ç - Espaços
- Retorna
Truese corresponder ao padrão, caso contrárioFalse.
- Aplica
-
Saída:
bool—Truepara mensagem válida;Falsecaso haja qualquer outro caractere.
3.6 Função clear_terminal
Objetivo e Funcionamento:
- Entrada: nenhuma.
-
Processamento:
- Verifica o sistema operacional via
os.name: - Se for
'nt', executacls(Windows). - Senão, executa
clear(Linux/macOS). - Chama
os.systemcom o comando apropriado para limpar o terminal.
- Verifica o sistema operacional via
- 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çãomainseja 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)