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