Facebook
From Small Pudu, 2 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 35
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define lli long long int  
  5.  
  6. lli N, G; //Chaves pública P e G
  7. lli a, b; //Números secretos de Alice e Bob respectivamente para criar a chave.
  8. lli A, B; //Números enviados um para o outro
  9. lli Sa, Sb; //Chave secreta usando os números compartilhados
  10.  
  11. //Retorna a ^ b mod P
  12. lli modularPower(lli base, lli exponent, lli mod) {
  13.     base %= mod;
  14.     lli ans = 1;
  15.     while(exponent > 0) {
  16.         if (exponent & 1) {
  17.             ans = ans * base % mod;
  18.         }
  19.         base = base * base % mod;
  20.         exponent >>= 1;
  21.     }
  22.     return ans;
  23. }
  24.  
  25. int main() {
  26.     N = 23; //Primo
  27.     G = 9; //Raiz primitiva de mod P
  28.  
  29.     cout << "Número primo público: " << N << "n";
  30.     cout << "Raiz primitiva pública: " << G << "n";
  31.  
  32.     a = 4;
  33.     cout << "Número secreto escolhido por Alice: " << a << "n";
  34.     A = modularPower(G, a, N); //Gera a chave que será compartilhada
  35.  
  36.     b = 3;
  37.     cout << "Número secreto escolhido por Bob: " << b << "n";
  38.     B = modularPower(G, b, N);
  39.  
  40.     cout << "Chave que Alice manda para Bob: " << A << "n";
  41.     cout << "Chave que Bob manda para Alice: " << B << "n";
  42.  
  43.     Sa = modularPower(B, a, N);
  44.     Sb = modularPower(A, b, N);
  45.  
  46.     cout << "Chave secreta de Alice: " << Sa << "n";
  47.     cout << "Chave secreta de Bob: " << Sb << "n";
  48.  
  49.     return 0;
  50. }
  51.