Advertisement
Guest User

Untitled

a guest
Oct 18th, 2016
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.82 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. void init (unsigned long int &p, unsigned long int &q);
  7. int gcd (int a, int b);
  8. int keySearch (int m);
  9. bool prime(int checkNumber);
  10. int getE (unsigned long int k);
  11. int getD (unsigned long int k, unsigned long key);
  12.  
  13. int main (void) {
  14.     unsigned long int p, q;
  15.  
  16.     init (p, q);
  17.     if (p <= 0 || q <= 0 || p == q) {
  18.         printf ("Wrong input!!!");
  19.         return 1;
  20.     }
  21.  
  22.     unsigned long int n = p * q;
  23.     unsigned long int m = (p - 1) * (q - 1);
  24.     unsigned long int keys = keySearch(m);
  25.     unsigned long int e = getE(keys);
  26.     unsigned long int d = getD(keys, e);
  27.     unsigned long int openKey[2] = {e, n};
  28.     unsigned long int secretKey[2] = {d, n};
  29.  
  30.     printf ("open exp 'e' = %ld\nsecret exp 'd' = %ld\n", e, d);
  31.  
  32.     char text [100];
  33.     fgets (text, 99, stdin);
  34.     puts (text);
  35.  
  36.     return 0;
  37. }
  38.  
  39. void init (unsigned long int &p, unsigned long int &q) {
  40.     printf ("enter first number: ");
  41.     scanf ("%ld", &p);
  42.     printf ("enter second number: ");
  43.     scanf ("%ld", &q);
  44. }
  45.  
  46. int gcd(int a, int b) {
  47.    int c;
  48.    while (b) {
  49.       c = a % b;
  50.       a = b;
  51.       b = c;
  52.    }
  53.    return abs(a);
  54. }
  55.  
  56. int keySearch(int m) {
  57.     for (int i = 1; ; i++) {
  58.         int sk = m * i + 1;
  59.         for (int j = 2; j <= 5; j++)
  60.             if ((sk % j == 0) && (sk / j != j) && (!prime(sk)))
  61.                 return sk;
  62.     }
  63. }
  64.  
  65. bool prime (int checkNumber) {
  66.     for ( int i = 2; i * i <= checkNumber; i++ ) {
  67.         if ( checkNumber % i == 0 ) {
  68.             return false;
  69.         }
  70.     }
  71.     return true;
  72. }
  73.  
  74. int getE (unsigned long int k) {
  75.     for (int i = 2; ; i++)
  76.         if (k % i == 0)
  77.             return i;
  78. }
  79.  
  80. int getD (unsigned long int k, unsigned long int e) {
  81.     return k / e;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement