Tämmönen 15 minuutin tekele, passugeneraattori. Heittää siis satunnaisia salasanoja jotka sisältävät isoja ja pieniä kirjaimia ja useimmiten myös numeroita.
Kieli on c++ kääntyy ainakin gcc:llä ja varmaan kaikilla muillakin c++ kääntäjillä.
#include <iostream> #include <stdlib.h> #include <time.h> #include <string> using namespace std; int main() { string passu; srand(time(0)); int luku, a, b, c = 8; // c muuttujan arvo == salasanan pituus for(a = 0; a < c; a ++) { b = rand() % 10; // tämä arpoo minkälainen merkki laitetaan (iso/pieni kirjain, numero) if(b < 3) { passu[a] = '0' + rand() % 9; } if(b > 2 && b < 7) { passu[a] = 'a' + rand() % 26; } if(b > 6) { passu[a] = 'A' + rand() % 26; } cout << passu[a]; } return 0; }
Koskapa tuo ei ole kovin suuri tekele, tuon olisi voinut laittaa using namespace std;-rivin tuohon. Ei olisi tarvinnut noita erillisiä usingeja.
jaksaako kukaan selitää aloittelijalle mitä alla oleva koodi tekee:
b = rand() % 10; // tämä arpoo minkälainen merkki laitetaan (iso/pieni kirjain, numero) if(b < 3) { passu[a] = '0' + rand() % 9; } if(b > 2 && b < 7) { passu[a] = 'a' + rand() % 26; } if(b > 6) { passu[a] = 'A' + rand() % 26; } cout << passu[a];
s_m_s:
b:n arvoksi tulee siis satunnaisluku 0-9.
Jos b on vähemmän kuin 3, merkkijonoon 'passu' arvotaan nykyisen pointterin kohdalle numero 0-9.
jos b on 3-6 niin arvotaan pieni kirjain väliltä a-z ja jos b on 7-9 arvotaan iso kirjain väliltä A-Z pointteriin.
Tuosta using jutusta että eihän tuo käytä ciniä eikä endliä, että periaatteessa pari turhaa riviä... Mutta ainahan marisijoita riittää! Näppärä ohjelma! Mulle tuo tapa lisätä satunnainen merkki oli uutta.
No ensinnäkin salasanageneraattori on yhdyssana :)
Tämänkin olisi voinut toteuttaa ehkä vähän toisin.
rivillä: passu[a] = '0' + rand() % 9; on ilmeisesti pieni bugi, rand()%9 palauttaa luvut 0 - 8 jolloin merkkiä '9' ei koskaan tulla saamaan mukaan generoitavaan salasanaan. Muutenkin todennäköisyyksien valinta numeroilla, pienille ja kirjaimille on hieman outo, todennäköisyydet menevät nyt suhteessa 3 : 4 : 3 ... haluamme varmaan mahdollisimman satunnaisia salasanoja, joten paremmat suhteet saattaisi tulla käyttämällä kirjainten ja numeroiden määrää suhteena, tyyliin 10 : 26 : 26 tai supistettuna 5 : 13 : 13 :)
Tein vastaavan version pure C:llä hieman erillaista lähestymistapaa käyttäen. Ohjelma ottaa nyt parametrinään generoitavan salasanan pituuden merkkeinä.
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> int main( int argc, char* argv[] ) { if( argc < 2 ) { return -1; } const char charTable[] = "abcdefghijklmnopqrstuvwzyxABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; const unsigned int charTableLen = strlen( charTable ); int n = atoi( argv[1] ); srand( time( 0 ) ); while( n-- ) { putchar( charTable[ rand()%charTableLen ] ); } putchar( '\n' ); return 0; }
Tabulaattorit eivät näköjään toimi, kuitenkin tässä versiossa kaikki merkit on laitettu erilliseen taulukkoon, siihen voi nyt myös lisätä erikoismerkkejä, jos siltä tuntuu. strlen laskee taulukon pituuden joka tässä tapauksessa on 10+26+26=64. atoi muuttaa argumentin [1] joka on ohjelmalle syötetty parametri, kokonaisluvuksi. Tätä lukua käytetään kertomaan kuinka pitkä salasanasta kuuluisi tulla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.