Pequeno programa em Python para facilitar os cálculos da disciplina de Matemática Discreta.
Este programa não foi concebido para ser usado de forma desonesta, i.e. em exames/testes. A utilização prevista e recomendada é como material de estudo. Qualquer utilização desonesta e contra o compromisso de honra é condenada pelos criados e contribuidores deste programa.
Para correr o programa, escreve python3 MDTools.py
na linha de comandos na pasta src, ou abre diretamente, com o Python, o mesmo ficheiro.
Qualquer contribuição ao projeto é bem vinda, contribuindo não só para aprendizagem própria, tanto como para ajudar futuros alunos da disciplina de Matemática Discreta. Posto isto, como é que podem contribuir? Achamos que a melhor forma de propor alterações é criando uma Issue e fazendo um pull request. Mais tarde, alguem irá rever o código e aprovar o merge com o código existente.
A) Ver algortimo FFT
B) Descobrir inverso de e mod (p-1) * (q-1)
C) Fazer congruências rapidamente
D) Obter soma em base 2 de número
E) Ver algoritmo RSA
F) Simplificar congruências
G) Algoritmo de Saunderson e Coeficientes de Bézout
H) Equações Diofantinas
I) Juliano
J) Gregoriano
K) Páscoa Juliana
L) Páscoa Gregoriana (passo a passo)
M) Noções Básicas
N) Teoremas
O) Algoritmo de Fleury
RSA é um algoritmo de criptografia de dados, que deve o seu nome a três professores do Instituto de Tecnologia de Massachusetts (MIT), Ronald Rivest, Adi Shamir e Leonard Adleman, fundadores da actual empresa RSA Data Security, Inc., que inventaram este algoritmo — até a data (2008) a mais bem sucedida implementação de sistemas de chaves assimétricas, e fundamenta-se em teorias clássicas dos números. É considerado dos mais seguros, já que mandou por terra todas as tentativas de quebrá-lo. Foi também o primeiro algoritmo a possibilitar criptografia e assinatura digital, e uma das grandes inovações em criptografia de chave pública.
O servidor e o cliente geram as suas chaves públicas e privadas. O servidor envia para o cliente sua chave pública, e o cliente envia para o servidor sua chave pública.
O cliente criptografa seus dados com a chave pública (do servidor), e envia para o servidor.
O servidor descriptografa os dados com a sua chave privada.
O servidor criptografa o que será enviado para o cliente com a chave pública do cliente, e envia para o cliente.
O cliente consegue, por fim, descriptografar o retorno do servidor, com sua chave privada.