Ну, меня попросили немного поработать с SHA-256. Я должен получить имя пользователя и пароль от пользователя (в консоли), изменить пароль на хэш-значение SHA-256 и закрыть файл (двоичный файл). Затем я должен прочитать его снова, получить его данные и сравнить его с новыми пользовательскими данными, проверяя, совпадают ли они или нет. Простая система входа в систему с использованием хеширования SHA-256. Дело в том, что я пишу случайное имя пользователя и пароль, но когда я пытаюсь сравнить их позже на втором этапе, это не удается. Часть SHA-256 идет прямо из исходного кода, это не было целью этого назначения.
Я попытался изменить все свои массивы char на strings, used, strcpy, strcpy_s и strncpy (на всякий случай) и другие, но, похоже, это не сработало. Большая часть кода поступает непосредственно из SHA-256 (мой учитель прислал его), но я все равно выложу его здесь
Я помещаю весь код в pastebin (он довольно длинный): https://pastebin.com/W9jxsbK6
Я не знаю, как правильно редактировать в этом текстовом поле, поэтому, пожалуйста, используйте ссылку для вставки в корзину.
struct Credentials {
char user[10];
char password[256];};
int main() {
Credentials c;
char user2[10];
char password2[256];
string test;
fstream file;
int opc;
do{
cout << "Menu:" << endl;
cout << "1.Create new user and password" << endl;
cout << "2.Validate user and password" << endl;
cin >> opc;
switch(opc){
case 1:
cout << "Type the user name" << endl;
cin >> user2;
strcpy_s(c.user, sizeof user2, user2);
cout << "Type the password" << endl;
cin >> password2;
test = SHA256::digestString(password2).toHex();
strcpy_s(c.password, sizeof test, test.c_str());
file.open("credentials.dat",ios::out|ios::binary);
if(!archivo){
cout<<"Error...\n";
return -1;
}
file.write((char*)&c,sizeof(c));
file.close();
break;
case 2:
cout << "Type user name" << endl;
cin >> user2;
cout << "Type password" << endl;
cin >> password2;
file.open("credentials.dat",ios::in|ios::binary);
if(!file){
cout<<"Error...\n";
return -1;
}
if(file.read((char*)&c,sizeof(Credentials))){
if(c.user == user2 && SHA256::digestString(password2).toHex() == c.password){
cout << endl << endl << "User validated" << endl;
}else{
cout << endl << endl << "Error" << endl;
}
}
}
} while (opc > 0 && opc < 3);
cin.ignore();
return 0;
}