Kokeilin muokata Piinkovan salasanan laskuohjelmaa siten, että se koettaisi murtaa MD5-hashia niin kauan kunnes käyttäjä painaa vaikkapa nuolta vasemmalle. Koetin googlata ohjeita, mutta jostain syystä tekeleeni ei toimikaan. Tai alunperin mietin, että esc voisi lopettaa ohjelman, mutta sitä ei suositeltu, https://www.gnu.org/software/guile-ncurses/manual/html_node/Getting-characters-from-the-keyboard.html. Mutta miksi seuraava ohjelma ei pysähdy vaikka painan nuolta vasemmalle? Mulla on tuo md5-funktio toisessa tiedostossa, ja se toimii kunnolla.
#include <ctime> #include <curses.h> #include <iostream> #include <string> #include "md5.h" using namespace std; static const char alphanum[] = "abcdefghijklmnopqrstuvwxyz"; int slen = sizeof(alphanum) - 1; char genrandom() { return alphanum[rand() % slen]; } int main() { int ch; time_t now = time(0); char* dt = ctime(&now); string SS = ""; // C++ STL string cout << "Ohjelman suoritus alkoi " << dt << endl; srand(time(0)); int k = 10; // Length of the correct digits while(1) { for(unsigned int i = 0; i < 74; ++i) { SS += genrandom(); } if(md5(SS).substr(0,k) == "3141592653") { cout << k << ": " << SS << endl; } SS = ""; ch = getch(); if(ch == KEY_LEFT) exit(0); } return EXIT_FAILURE; }
Curses-tilaan päästäksesi sinun täytyy kutsua alustusfunktiota: initscr(). Lopussa olisi hyvä kutsua vastaavasti lopetusfunktiota: endwin(). Täällä on myös opas.
Silmukan lopetukseen break olisi mielestäni tässä tilanteessa selvempi kuin exit.
Hmm. En saanut toimimaan.
#include <ctime> #include <curses.h> #include <iostream> #include <string> #include "md5.h" using namespace std; static const char alphanum[] = "abcdefghijklmnopqrstuvwxyz"; int slen = sizeof(alphanum) - 1; char genrandom() { return alphanum[rand() % slen]; } int main() { int ch; time_t now = time(0); char* dt = ctime(&now); string SS = ""; // C++ STL string cout << "Ohjelman suoritus alkoi " << dt << endl; srand(time(0)); initscr(); int k = 10; // Length of the correct digits while(1) { for(unsigned int i = 0; i < 74; ++i) { // Takes forever SS += genrandom(); } if(md5(SS).substr(0,k) == "3141592653") { cout << k << ": " << SS << endl; } SS = ""; ch = getch(); if(ch == KEY_LEFT) break; } endwin(); return EXIT_FAILURE; }
Kokeilepa hakea curses-oppaasta vaikka sanaa ”nuolinäppäin”, jospa sieltä löytyisi apua...
Aihe on jo aika vanha, joten et voi enää vastata siihen.