In C or C ONLY PLEASE 1thefunctionsforRSA aMappingfunction f

In C++ or C ONLY PLEASE

1.thefunctionsforRSA:

(a)Mappingfunction from todecimaldigits(SeetextbFigure9.7.(b)andformapping).willtoausedinRSAencryptionanddecryption.

(b)Keythattheinputsofprimeand,andgeneratetheparameters(n, ?(n), e, d),andtheforRSA.Thesub-routines

GCD function to find e: gcd(?(n), e) = 1; 1 < e < ?(n). Since there could be many such e values, you may use gcd to find the first five such e values.

Multiplicative inverse: d = e?1(mod ?(n)). You may use extended Euclidean algorithm to find the first five such d values corresponding to each of five e values (Note: Your multiplicative inverse value should be within [0, ?(n))).

(c)Encryptionfunctionthatofandpublic

(d)functionthatofciphertextand

(e)functionfromdecimaldigitsto

2.Experimentthecorrectnessofprogramusingtheplaintextandprimep =73andq =151:

(a)text:

(b)plaintext:

For each test of your RSA algorithm, you need to output the following information:

(a)RSAinformation:n, ?(n),thefirste,andd

(b)plaintext

(c)setsof:

Public key

Ciphertext

Private key

Plaintext

(d)fromdecimaldigitstoTheoutputfortheinputofisinFigure1.

Solution

/* * C++ Program to Implement the RSA Algorithm */ #include #include #include #include using namespace std; long int p, q, n, t, flag, e[100], d[100], temp[100], j, m[100], en[100], i; char msg[100]; int prime(long int); void ce(); long int cd(long int); void encrypt(); void decrypt(); int prime(long int pr) { int i; j = sqrt(pr); for (i = 2; i <= j; i++) { if (pr % i == 0) return 0; } return 1; } int main() { cout << \"\ ENTER FIRST PRIME NUMBER\ \"; cin >> p; flag = prime(p); if (flag == 0) { cout << \"\ WRONG INPUT\ \"; exit(1); } cout << \"\ ENTER ANOTHER PRIME NUMBER\ \"; cin >> q; flag = prime(q); if (flag == 0 || p == q) { cout << \"\ WRONG INPUT\ \"; exit(1); } cout << \"\ ENTER MESSAGE\ \"; fflush(stdin); cin >> msg; for (i = 0; msg[i] != NULL; i++) m[i] = msg[i]; n = p * q; t = (p - 1) * (q - 1); ce(); cout << \"\ POSSIBLE VALUES OF e AND d ARE\ \"; for (i = 0; i < j - 1; i++) cout << e[i] << \"\\t\" << d[i] << \"\ \"; encrypt(); decrypt(); return 0; } void ce() { int k; k = 0; for (i = 2; i < t; i++) { if (t % i == 0) continue; flag = prime(i); if (flag == 1 && i != p && i != q) { e[k] = i; flag = cd(e[k]); if (flag > 0) { d[k] = flag; k++; } if (k == 99) break; } } } long int cd(long int x) { long int k = 1; while (1) { k = k + t; if (k % x == 0) return (k / x); } } void encrypt() { long int pt, ct, key = e[0], k, len; i = 0; len = strlen(msg); while (i != len) { pt = m[i]; pt = pt - 96; k = 1; for (j = 0; j < key; j++) { k = k * pt; k = k % n; } temp[i] = k; ct = k + 96; en[i] = ct; i++; } en[i] = -1; cout << \"\ THE ENCRYPTED MESSAGE IS\ \"; for (i = 0; en[i] != -1; i++) printf(\"%c\", en[i]); } void decrypt() { long int pt, ct, key = d[0], k; i = 0; while (en[i] != -1) { ct = temp[i]; k = 1; for (j = 0; j < key; j++) { k = k * ct; k = k % n; } pt = k + 96; m[i] = pt; i++; } m[i] = -1; cout << \"\ THE DECRYPTED MESSAGE IS\ \"; for (i = 0; m[i] != -1; i++) printf(\"%c\", m[i]); }
In C++ or C ONLY PLEASE 1.thefunctionsforRSA: (a)Mappingfunction from todecimaldigits(SeetextbFigure9.7.(b)andformapping).willtoausedinRSAencryptionanddecryptio

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site