Witam serdecznie i proszę o pomoc.
Mam pewien kłopot z pisanym programem, który jest już na ostatniej prostej.
Oto co się dzieje: funkcja login pobiera z textboxa login oraz hasło, pobiera również z pliku zaszyfrowany login oraz hasło, deszyfruje je i porównuje. Jeśli znajdzie pasującą parę to przepuszcza użytkownika dalej.
Doszedłem do tego, że funkcja zaznaczona na drugim obrazku, która odszyfrowuje hasło powoduje wystąpienie nieobsługiwanego wyjątku dla funkcji stoi. Co ciekawe, program sypie się dopiero przy drugim odczycie pary danych z pliku, a dla pierwszej pary działa dobrze. Nie mam pojęcia dlaczego tak się dzieje. Dane przechowywane w zmiennych też nie są zbyt duże aby int ich nie pomieścił. Możliwe że przeoczyłem jakiś aspekt, który ma na to wpływ.
Będę wdzięczny za pomoc oraz za jakiekolwiek wskazówki w czym może być problem.
Poniżej kod z testowania problemu i występuje on również dla poniższego programu:
string encrypt(string password)
{
srand(time(NULL));
int passLength = password.length(),
intSeed, seedLen, check;
string encryptedPassword, seed, strPassLength;
seedLen = 64 - passLength;
for (int i = 0; i < seedLen; i++)
{
check = rand() % 2;
if (check == 0)
seed += lowerCaseGen();
else
seed += digitsGen();
}
if (passLength < 10)
strPassLength = '0' + to_string(passLength);
else
strPassLength = to_string(passLength);
encryptedPassword = strPassLength + password + seed;
passLength = encryptedPassword.length();
for (int i = 0; i < passLength; i += 2)
{
encryptedPassword[i] += passLength;
encryptedPassword[i+1] -= passLength;
}
return encryptedPassword;
}
string decrypt(string encrypted)
{
string decrypted, strPassLen;
int passLength = encrypted.length();
for (int i = 0; i < passLength; i += 2)
{
encrypted[i] -= passLength;
encrypted[i + 1] += passLength;
}
strPassLen = encrypted.substr(0, 2);
if (strPassLen[0] == '0')
strPassLen = strPassLen.substr(1, 1);
passLength = stoi(strPassLen);
decrypted = encrypted.substr(2, passLength);
return decrypted;
}
void odczyt()
{
fstream file;
file.open("passwords.txt", ios::in|ios::app);
string login, password, decryptedLogin, decryptedPassword;
file >> login;
file >> password;
decryptedLogin = decrypt(login);
decryptedPassword = decrypt(password);
cout << decryptedLogin << " " << decryptedPassword << endl;
file.close();
}
void zapis(string login, string password)
{
fstream file;
file.open("passwords.txt", ios::out);
string encryptedLogin = encrypt(login);
string encryptedPassword = encrypt(password);
file << encryptedLogin << " " << encryptedPassword << endl;
file.close();
}
int main()
{
zapis("Qt", "123456");
zapis("1234", "987654321");
odczyt();
system("pause");
return 0;
}