Инициализация 0 в RSA
вышел вот такой код проблема что код не дает ввести текст вводя просто 0 и программа кончается
#include <iostream>
#include <math.h>
#include <string>
#include <stdlib.h>
using namespace std;
long int p, q, n, t, temp[100], j;
long int decryptedText[100], encryptedText[100], i, len;
bool flag;
string msg;
void encrypt(long int);
void decrypt(long int);
long int gcalculateD(long int a, long int b);
bool isPrime(long int);
long int calculatedE();
long int calculateD(long int);
int main()
{
cout << "Welcome to RSA program" << endl;
do
{
cout << "Enter a Prime number p :" << endl;
cin >> p;
flag = isPrime(p);
if (flag == false)
{
cout << "\nWRONG INPUT\n";
}
} while (flag == 0);
do
{
cout << "Enter a Prime number q :" << endl;
cin >> q;
flag = isPrime(q);
if (flag == false)
{
cout << "\nWRONG INPUT\n";
}
} while (flag == 0);
cout << "\nEnter Message to be encrypted : \n";
getline(cin, msg);
for (i = 0; msg[i] != NULL; i++)
decryptedText[i] = msg[i];
cout << i;
n = p * q;
t = (p - 1) * (q - 1);
long int e = calculatedE();
long int d = calculateD(e);
encrypt(e);
decrypt(d);
system("pause");
return 0;
}
bool isPrime(long int pr)
{
int i;
j = (long int)sqrt((long double)pr);
for (i = 2; i <= j; i++)
{
if (pr % i == 0)
return false;
}
return true;
}
long int calculatedE()
{
for (i = 2; i < t; i++)
{
if (gcalculateD(i, t) == 1)
return i;
}
return -1;
}
long int calculateD(long int x)
{
long int k = 1;
while (1)
{
k = k + t;
if (k % x == 0)
return(k / x);
}
}
void encrypt(long int e)
{
long int pt, ct, key = e, k;
i = 0;
len = msg.length();
while (i != len)
{
pt = decryptedText[i];
pt = pt - 97;
k = 1;
for (j = 0; j < key; j++)
{
k = k * pt;
k = k % n;
}
temp[i] = k;
ct = k = 97;
decryptedText[i] = ct;
i++;
}
encryptedText[i] = -1;
cout << "\nTHE ENCRYPTED MESSAGE IS\n";
for (i = 0; i < len; i++)
printf("%c", encryptedText[i]);
}
void decrypt(long int d)
{
long int pt, ct, key = d, k;
i = 0;
while (encryptedText[i] != -1)
{
ct = temp[i];
k = 1;
for (j = 0; j < key; j++)
{
k = k * ct;
k = k % ct;
}
pt = k + 97;
decryptedText[i] = pt;
i++;
}
decryptedText[i] = -1;
cout << "\nTHE DECRYPTED MESSAGE IS\n";
for (i = 0; i < len; i++)
printf("%c", decryptedText[i]);
printf("\n");
}
long int gcalculateD(long int a, long int b)
{
if (a == 0 || b == 0)
return 0;
if (a == b)
return a;
if (a > b)
return gcalculateD(a - b, b);
return gcalculateD(a, b - a);
}
