#include <iostream>
#include <windows.h>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
int dlhaslo;
string hash;
string znaczenie;
string space;
void menu()
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN);
cout<<"--------------Generator hasel--------------"<<endl;
cout<<"-------------------------------------------"<<endl;
cout<<"Czasami moga wystepowac niedozwolone znaki!"<<endl;
cout<<"-------------------------------------------"<<endl;
}
//Generator hasel
const char * genText(int max, bool potasuj = true) {
/*
* Funkcja generuje losowy ciąg.
* -argument max to długość wygenerowanego ciągu
* -argument potasuj aktywuje dodatkowe przemieszanie ciagu (domyslny argument)
*/
//Cztery tablice z roznymi typami znakow. Mozna modyfikowac!
char tab0[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
char tab1[] = "012345678911121314151617181920";
//Tablica flag z uzytymi juz tablicami. Zapewnia rownomierny rozklad uzycia wszystkich tablic z znakami podobna ilosc razy)
bool vistTab[] = {0, 0, 0, 0};
//Zwracany ciag
string buffor;
srand(time(NULL));
//Petla generowania znak po znaku
for (int i = 1; i < max; i++) {
//Sprawdz czy wszystkie 4 tablice juz uzyte byly, jesli tak to zezwol ponownie na wylosowanie wszystkich tablic
if (vistTab[0] == true && vistTab[1] == true)
vistTab[0] = vistTab[1] = false;
//Sprawdz czy wylosowany typ tablicy nie byl juz wykorzystywany, jak byl to losuj inna
int randTab;
do {
randTab = rand() % 2;
} while (vistTab[randTab] == true);
vistTab[randTab] = 1;
int sizeTab = 0;
int nr;
//Zaleznie od wylosowanej powyzej tablicy ze znakami, losuje z niej znak i dopisuje go do buffora
switch (randTab) {
case 0:
sizeTab = sizeof (tab0) / sizeof (tab1[0])-1;
nr = rand() % sizeTab;
buffor += tab0[nr];
break;
case 1:
sizeTab = sizeof (tab1) / sizeof (tab1[0])-1;
nr = rand() % sizeTab;
buffor += tab1[nr];
break;
}
}
//------------------------------------------------
return buffor.c_str();
}
//-------------------------------------------------------
int main()
{
//nazwa okna
SetConsoleTitleA( "Generator hasel" );
//-------------------------------------
menu();
cout<<"Wprowadz dlugosc hasla: \a \a"<<endl;
cin>>dlhaslo;
system("cls");
menu();
hash=genText(dlhaslo+1, true);
cout<<"\a";
cout<<hash<<endl;
system("cls");
menu();
string g;
fstream plik;
plik.open("haslo.txt", ios::out | ios::app);
plik<<endl<<hash;
cout<<"Dopisek do hasla: ";
cin>>g;
getline( std::g, std::znaczenie );
plik<<" Liczba znakow: "<<dlhaslo;
plik<<" Haslo do: "<<znaczenie;
plik.close();
cout<<"\a \a \a";
system("pause");
}
Najpierw trzeba podać dlugosc ciagu, następnie program generuje tyle znaków co się wpisało, teraz trzeba podać dopisek do ciągu(po wygenerowanym ciągu po 3 spacjach ma się pojawić dopisek wpisany na klawiaturze) i to wszystko powinno zapisać się w pliku .txt nst. 2A6V4Kb61LV22f8u1GI1x18 Liczba znakow: 23 Haslo do: gfgf
Tylko, że przy Hasło do: , usuwa pierwszy wyraz np. pro pro, zapisze tylko 1 raz pro.