Инициализация 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);
}

заранее спасибо товарищи! вот результат компиляции


Ответы (0 шт):