https://github.com/tarcisio-marinho/rsa
Simple RSA cryptographyc algorithm implementation
https://github.com/tarcisio-marinho/rsa
algorithm chavepublica criptografia cryptography diffie-hellman hacktoberfest hacktoberfest2020 public-key-cryptography publickey rsa rsa-aes rsa-cryptography rsa-encryption rsa-key-encryption rsa-key-pair rsa-signature
Last synced: 2 months ago
JSON representation
Simple RSA cryptographyc algorithm implementation
- Host: GitHub
- URL: https://github.com/tarcisio-marinho/rsa
- Owner: tarcisio-marinho
- License: gpl-3.0
- Created: 2017-03-11T20:50:28.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2020-09-19T17:38:46.000Z (over 4 years ago)
- Last Synced: 2025-03-23T19:22:26.914Z (3 months ago)
- Topics: algorithm, chavepublica, criptografia, cryptography, diffie-hellman, hacktoberfest, hacktoberfest2020, public-key-cryptography, publickey, rsa, rsa-aes, rsa-cryptography, rsa-encryption, rsa-key-encryption, rsa-key-pair, rsa-signature
- Language: Python
- Homepage:
- Size: 26.4 KB
- Stars: 27
- Watchers: 2
- Forks: 8
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Implementação simples do Algoritmo de criptografia assimétrica RSA
Feito por diversão e aprendizado, não está de acordo com os padrões do algoritmo RSA atualmente.
Não use para nada importante.# Quer saber mais sobre o RSA ?
https://medium.com/@tarcisioma/algoritmo-de-criptografia-assim%C3%A9trica-rsa-c6254a3c7042# Execução:
~$ python enconde.py
Insira o texto que você deseja criptografar
O programa criptografa e descriptografa o texto, mostrando o texto cifrado e depois o texto plano
https://en.wikipedia.org/wiki/RSA_(cryptosystem)# Este repositório contém o código gerador das chaves publicas e privada
O método de criação delas não segue nenhum padrão do algoritmo RSA
foi algo criado por mim mesmo, seguindo algumas instruções básicas de criaçãoO algoritmo de geração das chaves é o seguinte:
**Geração da Chave Pública:**
- gera o número P aleatório, P tem que ser primo
- gera o número Q também aleatório e também primo
- calcula N, sendo a multiplicação de P por Q
- N = P*Q
- calcula o totiente de N, phi(N), sendo Q-1 * P-1, pois eles são primos
- phi(N)= (Q-1)*(P-1)
- gera o número E, aleatório também, tendo que satisfazer a igualdade 1 < E < phi(N)
- depois de gerado E, o mdc entre E e phi(N) tem que ser igual a 1
- mdc(phi(N), E) == 1, se não satisfazer a isso, terá que ser gerado outro número aleatório E
- A chave pública é composta por N e E**Geração da Chave Privada:**
- para encontrar o D, precisa satisfazer a igualdade mod(D^E, phi(N)) == 1
- a função modular se dá pelo resto de divisão entre D^E e phi(N)
- se for igual a 1, achou o D, se não, o D é incrementado até satisfazer a condição**Criptografar texto:**
- A chave privada é guardada pelo servidor, e a pública é enviada para o cliente
- O cliente possuí o E e o N
- Para o cliente criptografar o conteúdo que será enviado para o servidor ele tem que seguir o seguinte algoritmo:
- para cada caracter na string que será enviada:
- o valor da letra em ascii é elevado a E, ex: 111^E
- o resultado é utilizado na função modular
- mod(111^E, N) -> o resultado vai ser o valor criptografado e que será enviado para o servidor
- esse processo se repete para todos os caracteres da string que será enviada**Descriptografar:**
- Para o servidor descriptografar o texto cifrado, ele deve seguir o seguinte algoritmo:
- para o valor cifrado de cada caracter -> valor^D -> sendo D a chave privada
- o resultado ele utiliza na função modular, mod(resultado, N) -> retornando ao valor 111
- que deverá ser convertido para ascii
- o processo repete para todos os caracteres criptografados do texto cifrado**Mais sobre o algoritmo RSA**
https://pt.m.wikipedia.org/wiki/RSA
https://www.lambda3.com.br/2012/12/entendendo-de-verdade-a-criptografia-rsa/
http://www.lambda3.com.br/2012/12/entendendo-de-verdade-a-criptografia-rsa-parte-ii/
http://www.lambda3.com.br/2013/01/entendendo-de-verdade-a-criptografia-rsa-parte-iii/
# Uso prático:
Eu fiz o uso desse algoritmo na implementação de um servidor e cliente SSH, usando o algoritmo RSA para troca de chaves entre o cliente e o servidor,
Código: https://github.com/tarcisio-marinho/SSH