Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- void init (unsigned long int &p, unsigned long int &q);
- int gcd (int a, int b);
- int keySearch (int m);
- bool prime(int checkNumber);
- int getE (unsigned long int k);
- int getD (unsigned long int k, unsigned long key);
- int main (void) {
- unsigned long int p, q;
- init (p, q);
- if (p <= 0 || q <= 0 || p == q) {
- printf ("Wrong input!!!");
- return 1;
- }
- unsigned long int n = p * q;
- unsigned long int m = (p - 1) * (q - 1);
- unsigned long int keys = keySearch(m);
- unsigned long int e = getE(keys);
- unsigned long int d = getD(keys, e);
- unsigned long int openKey[2] = {e, n};
- unsigned long int secretKey[2] = {d, n};
- printf ("open exp 'e' = %ld\nsecret exp 'd' = %ld\n", e, d);
- char text [100];
- fgets (text, 99, stdin);
- puts (text);
- return 0;
- }
- void init (unsigned long int &p, unsigned long int &q) {
- printf ("enter first number: ");
- scanf ("%ld", &p);
- printf ("enter second number: ");
- scanf ("%ld", &q);
- }
- int gcd(int a, int b) {
- int c;
- while (b) {
- c = a % b;
- a = b;
- b = c;
- }
- return abs(a);
- }
- int keySearch(int m) {
- for (int i = 1; ; i++) {
- int sk = m * i + 1;
- for (int j = 2; j <= 5; j++)
- if ((sk % j == 0) && (sk / j != j) && (!prime(sk)))
- return sk;
- }
- }
- bool prime (int checkNumber) {
- for ( int i = 2; i * i <= checkNumber; i++ ) {
- if ( checkNumber % i == 0 ) {
- return false;
- }
- }
- return true;
- }
- int getE (unsigned long int k) {
- for (int i = 2; ; i++)
- if (k % i == 0)
- return i;
- }
- int getD (unsigned long int k, unsigned long int e) {
- return k / e;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement