Skip to content

Um repositório Python que contém implementações das cifras RSA e Vigenère, permitindo a criptografia e descriptografia de dados sensíveis

Notifications You must be signed in to change notification settings

oleoespindola/CryptoRSAVigenerePython

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Criptografia em Python

O objetivo deste projeto é mostrar ao usuário duas apicações de criptografia diferentes: cifra de Vigenère e o método RSA.

📒 Sumário



1 - Template

O arquivo app.py é a raiz do projeto, responsável por dar início a aplicação, utilizando a biblioteca flask para rodar aplicação em uma página html.

1.1 template/index.html

É o template base da aplicação. Contém a nav e footer do projeto. Seu main será sibstituído pelos decodores.

1.2 template/_home.html

Apresenta no main da aplicação, uma mensagem de boas-vindas e um texo que explica o objetivo do projeto e como ele irá funcionar.

2. - Cifra de Vigenère

Irá utilizar uma serie de deslocamentos alfabéticos (assim como na Cifra de César) baseado em única chave, tratando-se, portanto, de um método de criptografia de chave simétrica.

Neste projeto, o método de Viginére ira aceitar apenas letras (maiúsculas ou minúsculas). Não será possível utilizar números ou caracteres expeciais. A desencriptação sempre irá retornar o texto em caixa alta.

2.1 Construção da tabula recta

Um arquivo csv (file_vigenere.csv no programa) contem todos os caracteres possíveis.

A função table_vigenere() irá construir uma tabela e utilizar esses caracteres como cabeçalhos de linhas e colunas. Os valores da tabela serão os mesmos caracteres, mas o vetor de B será o vetor de A, com a alteração de que a primeira posição de A passa a ser a última posição de B. Veja o exemplo abaixo:

exemplo de uma tabula recta


2.2 Encriptação e decriptação de Virgenère

A função vigenere_encrypt() irá repetir a palavra chave até que ela possua o mesmo tamanho do texto que será criptografado. Cada letra da palavra chave servirá como índice de linha para cada letra do texto que a ser criptografado, as letras do texo a ser criptografa serão os índeces de coluna.

3- Método RSA

Utiliza um conjunto de chaves assimétricas, sendo duas chaves públicas e três chaves privadas. O código das funções utilizadas neste método está no arquivo _rsa.py na pasta raiz do projeto. Trata-se de criptografia de chaves assimétricas com inúmeras possibilidades de combinações diferentes, logo, seu processamento é mais lento que o método anterior.

3.1 Escolha das primeiras chaves privadas

A encriptação começa a partir da escola de duas chaves privadas, arbitrarias, mas precisam ser necessariamente dois números primos. Quanto maior o algarismo, mas difícil se torna a decriptação.

No código chamaremos essas duas chaves de:

key_one = 883     # 1ª Chave privada
key_two = 997     # 2ª Chave privada



3.2 Definindo as chaves públicas

A primeira chave pública é dada pelo produto das chaves privadas. No código:

product_of_keys = key_one * key_two     # Mais conhecido como 1ª Chave pública

A segunda chave pública também é arbitrária, mas precisa obedecer às seguintes regras:

  • 1 < segunda chave pública < φ(n)
  • m.d.c( φ(n), segunda chave pública) = 1
  • segunda chave pública = número primo

A função public_key() será responsável por retornar uma lista com as duas chaves públicas de acordo com a regras acima.

3.3 Definindo a terceira chave privada

A terceira chave privada será o inverso multiplicativo modular da segunda chave pública. No código, a function responsável por retornar esse valor será private_key()

3.4 Encriptação

A formula da encriptação é 'x' = ('Número da letra ** '2ª Chave pública') % '1ª Chave pública’ e será dada pela function criptografar()

3.5 Decriptação

A fórmula da decriptação é 'x' = ('Número criptografado ** '3ª chave privada') % '1ª Chave pública’ e será dada pela function descriptografar()


Colaboração e sugestões de melhorias

O código está aberto e disponível para colaboração e sugestões de melhorias. Sinta-se livre para enviar pull requests com modificações e correções.

Qualquer dúvida ou sugestão, não hesite em entrar em contato | @oleoespindola

About

Um repositório Python que contém implementações das cifras RSA e Vigenère, permitindo a criptografia e descriptografia de dados sensíveis

Topics

Resources

Stars

Watchers

Forks