Você está na página 1de 7

28/03/22, 13:03 Algoritmo RSA em Criptografia - GeeksforGeeks

Estruturas de dados Algoritmos Preparação para entrevista Prática de tópicos C++ Java P

Algoritmo RSA em Criptografia


Nível de dificuldade: Médio ● Última atualização: 05 de janeiro de 2021

O algoritmo RS A é um algoritmo de criptografia assimétrica. A ssimétrico na verdade

significa que ele funciona em duas chaves diferentes, ou seja , Chave Pública e Chave

Privada. Como o nome descreve, a chave pública é dada a todos e a chave privada é

mantida privada.

Um exemplo de criptografia assimétrica:

1. Um cliente (por exemplo, navegador) envia sua chave pública ao ser vidor e solicita

alguns dados.

2. O ser vidor criptografa os dados usando a chave pública do cliente e envia os dados

criptografados.

3. O cliente recebe esses dados e os descriptografa.

Como isso é assimétrico, ninguém, exceto o navegador, pode descriptografar os dados,

mesmo que um terceiro tenha a chave pública do navegador.

A ideia! A ideia do RS A é baseada no fato de que é difícil fatorar um inteiro grande. A

chave pública consiste em dois números onde um número é a multiplicação de dois

números primos grandes. E a chave privada também é derivada dos mesmos dois

números primos. Por tanto, se alguém puder fatorar o número grande, a chave privada

será comprometida. Por tanto, a força da criptografia está totalmente no tamanho da

chave e, se dobrarmos ou triplicarmos o tamanho da chave, a força da criptografia

aumentará exponencialmente. A s chaves RS A podem ter normalmente 1024 ou 2048

Comece sua jornada de


bits, mas os especialistas acreditam que as chaves de 1024 bits podem ser quebradas Conecte-
Registro
codificação agora!
em um futuro próximo. Mas até agora parece ser uma tarefa inviável.
se

https://www.geeksforgeeks.org/rsa-algorithm-cryptography/ 1/7
28/03/22, 13:03 Algoritmo RSA em Criptografia - GeeksforGeeks

Vamos aprender o mecanismo por trás do algoritmo RSA:

>> Gerando Chave Pública:

Selecione dois números primos. Suponha P = 53 e Q = 59 .

Agora Primeira parte da chave pública: n = P*Q = 3127 .

Também precisamos de um pequeno expoente, digamos e :

Mas e deve ser

Um número inteiro.

Não seja um fator de n.

1 < e < Φ(n) [Φ(n) é discutido abaixo],

Vamos agora considerá-lo igual a 3.

Nossa chave pública é feita de n e e

>> Gerando chave privada:

Precisamos calcular Φ(n):

Tal que Φ(n) = (P-1)(Q-1)

então, Φ(n) = 3016

Agora calcule a chave privada, d :

d = (k*Φ(n) + 1) / e para algum inteiro k

Para k = 2, o valor de d é 2011.

Agora estamos prontos com nossa – Chave Pública ( n = 3127 e e = 3) e Chave Privada(d

= 2011)

Agora vamos criptografar “HI” :

Converter letras em números: H = 8 e I = 9

e
Assim, Dados Criptografados c = 89 mod n .

Assim, nossos dados criptografados são 1394

Comece sua jornada de Conecte-


Registro
codificação
Agora agora! 1394 :

vamos descriptografar se

https://www.geeksforgeeks.org/rsa-algorithm-cryptography/ 2/7
28/03/22, 13:03 Algoritmo RSA em Criptografia - GeeksforGeeks

d
Dados descriptografados = c mod n .

Assim, nossos Dados Criptografados são 89

8 = H e I = 9 ie "HI".

Abaixo está a implementação C do algoritmo RSA para valores pequenos :

// C program for RSA asymmetric cryptographic


// algorithm. For demonstration values are
// relatively small compared to practical
// application
#include<stdio.h>
#include<math.h>
  
// Returns gcd of a and b
int gcd(int a, int h)
{
    int temp;
    while (1)
    {
        temp = a%h;
        if (temp == 0)
          return h;
        a = h;
        h = temp;
    }
}
  
// Code to demonstrate RSA algorithm
int main()
{
    // Two random prime numbers
    double p = 3;
    double q = 7;
  
    // First part of public key:
    double n = p*q;
  
    // Finding other part of public key.
    // e stands for encrypt
    double e = 2;
    double phi = (p-1)*(q-1);
    while (e < phi)
    {
Comece sua jornada de
        // e must be co-prime to phi and Conecte-
Registro
codificação agora!
        // smaller than phi.
        if (gcd(e, phi)==1)
se
            break;

https://www.geeksforgeeks.org/rsa-algorithm-cryptography/ 3/7
28/03/22, 13:03 Algoritmo RSA em Criptografia - GeeksforGeeks

        else
            e++;
    }
  
    // Private key (d stands for decrypt)
    // choosing d such that it satisfies
    // d*e = 1 + k * totient
    int k = 2;  // A constant value
    double d = (1 + (k*phi))/e;
  
    // Message to be encrypted
    double msg = 20;
  
    printf("Message data = %lf", msg);
  
    // Encryption c = (msg ^ e) % n
    double c = pow(msg, e);
    c = fmod(c, n);
    printf("\nEncrypted data = %lf", c);
  
    // Decryption m = (c ^ d) % n
    double m = pow(c, d);
    m = fmod(m, n);
    printf("\nOriginal Message Sent = %lf", m);
  
    return 0;
}
// This code is contributed by Akash Sharan.

Saída :

Dados da mensagem = 12,000000

Dados criptografados = 3,000000

Mensagem original enviada = 12,000000

E ste ar tigo é uma contribuição de Mohit Gupta_OMG . Se você gosta de

GeeksforGeeks e gostaria de contribuir, você também pode escrever um ar tigo usando

contribuir.geeksforgeeks.org ou enviar seu ar tigo para contribuir@geeksforgeeks.org.

Veja seu ar tigo aparecendo na página principal do GeeksforGeeks e ajude outros Geeks.

Por favor, escreva comentários se encontrar algo incorreto ou se quiser compar tilhar

Comece sua jornada de Conecte-


Registro
codificação agora!
mais informações sobre o tópico discutido acima.

se

https://www.geeksforgeeks.org/rsa-algorithm-cryptography/ 4/7
28/03/22, 13:03 Algoritmo RSA em Criptografia - GeeksforGeeks

Como 81

Anterior Próximo

ARTIGOS RECOMENDADOS Página : 1 2 3

Criptografia clássica e criptografia Algoritmo RSA usando a Biblioteca


01 05
quântica Aritmética de Precisão Múltipla
29 de abril de 19 19, 18 de março

Algoritmos de criptografia de How to generate Large Prime


02
construção personalizada 06
numbers for RSA Algorithm
(criptografia híbrida) 26, Jun 20

06, 18 de setembro

Como resolver problemas de One Time Password (OTP)


07
03
algoritmosua
RSA?jornada de algorithm in Cryptography
Comece Conecte-
Registro
codificação agora!
31, Jan 19

se
12, 18 de novembro

Diferença entre algoritmo RSA e Shamir's Secret Sharing Algorithm |


08
https://www.geeksforgeeks.org/rsa-algorithm-cryptography/ C t h 5/7
28/03/22, 13:03 Algoritmo RSA em Criptografia - GeeksforGeeks
08
DSA Cryptography
04 22, 20 de maio 07, May 20

Ar tigo contribuído por:

GeeksforGeeks

Vote na dificuldade

Dificuldade atual:
Médio

Fácil Normal Médio Duro Especialista

Melhorado por: bote


Etiquetas do artigo: criptografia, Teoria dos Números, Redes de Computadores
Pratique Tags: Teoria dos Números, criptografia, Redes de Computadores

Melhorar artigo Reportar problema

Escrevendo código no comentário? Por favor, use ide.geeksforgeeks.org , gere link e compartilhe o link aqui.

Carregar comentários

Comece sua jornada de Conecte-


Registro
codificação agora! se

5º Andar, A-118,

S t 136 N id Utt P d h 201305


https://www.geeksforgeeks.org/rsa-algorithm-cryptography/ 6/7
28/03/22, 13:03 Algoritmo RSA em Criptografia - GeeksforGeeks
Setor-136, Noida, Uttar Pradesh - 201305

feedback@geeksforgeeks.org

Companhia Aprender
Sobre nós Algoritmos
Carreiras Estruturas de dados
Em média Folha de dicas SDE
Contate-Nos Aprendizado de máquina
Política de Privacidade Assuntos CS
Política de direitos autorais Tutoriais em vídeo

Notícias línguas
Manchetes Pitão
Tecnologia Java
Trabalho e Carreira PCP
O negócio Golang
Finança C#
Estilo de vida SQL

Desenvolvimento web Contribuir


Tutoriais da Web Escrever um artigo
Tutorial de Django Melhorar um artigo
HTML Escolha os tópicos para escrever
CSS Escreva a experiência da entrevista
JavaScript Estágios
Bootstrap Estágio em vídeo

Comece sua jornada de Conecte-


Registro
codificação@geeksforgeeks
agora! , Alguns direitos reservados
se

https://www.geeksforgeeks.org/rsa-algorithm-cryptography/ 7/7

Você também pode gostar