Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: random function c++  (gelezen 1158 keer)

random function c++
« Gepost op: 2011/09/16, 23:26:36 »
hallo,

ik ben net een aantal weekjes bezig met het leren van C++, en heb een vraag mbt random functions.

stel ik heb het volgende:

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

void print_all_permutations(string s)
{
sort(s.begin(), s.end());
do
{
cout << s << endl;
} while (next_permutation(s.begin(), s.end()));
}

int main(){
print_all_permutations("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`~!@#$%^&*()_+-=[]{}\|;':",.<>/?");
return 1;
}


Dit wordt een aardige wachttijd wanneer dit wordt gebruikt. Nu worden alle mogelijkheden geprint en dat zijn er nog al wat :). Nu zou ik graag willen weten hoe ik dmv user_input een wachtwoord kan creeren.

Laten we zeggen:
string user_input;
 cout << "Enter password length: ";
 cin.ignore(256, '\n');
 cin >> user_input;

Stel er wordt het getal 8 ingegeven, dan wil ik dus 8 chars uit de hele string pakken en deze als een random 8 character string op het scherm printen.

Kan iemand mij een beetje op weg helpen ?
Ik praat niet te snel, je luisterd te langzaam ;-)

Re: random function c++
« Reactie #1 Gepost op: 2011/09/17, 00:34:44 »
zoek eens naar de rand() functie uit stdlib dat is de standaard random generator van C. zie ook man rand, man srand etc. Punt is alleen dat is een zgn feedback shift register, en die zijn nog al voorspelbaar dwz gegeven een bepaalde seed gegeneren ze altijd dezelfde reeks. Voor security (wachtwoorden) zijn die dus wat minder geschikt. Bovendien moet je deze ook seeden. De seed bepaalt daarbij de reeks. Mersenne twister zijn vaak al een stuk beter (geen idee zo of die er bestaan voor C++).

Je kunt op linux en de meeste andere unixachtingen veelal wel gebruik maken van de speciale bestanden /dev/random of /dev/urandom. De eerste genereert zeer goede kwaliteit random getallen maar kan traag zijn. de tweede kan mindere kwaliteit hebben maar genereert wel snel.

Random getallen genereren op een computer is _heel_ moeilijk. In de vele gevallen wordt een of andere formule gebruikt die een bepaalde reeks genereert zoals rand(). Echte random informatie is maar zeer beperkt beschikbaar. Voor /dev/random wordt bijv o.a. de timing van interrupts gebruikt. Het sleutelwoord daarbij is entropie.
URD - http://www.urdland.com - Usenet Resource Downloader

Re: random function c++
« Reactie #2 Gepost op: 2011/09/17, 11:18:40 »
// Noem kSrc de bronverzameling
// Noem kSrcLen de lengte van de bronverzameling
// Noem dstLen de lengte van de doelverzameling

srand(time(0));

string dst;

for(int i = 0; i < dstLen; ++i) {
    dst += kSrc[rand() % kSrcLen];
}

// dst is de gezochte doelverzameling

« Laatst bewerkt op: 2011/09/17, 11:20:24 door SeySayux »
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net