>Tre osservazioni: la prima e` che se fai randnum % 255 ottieni un numero compreso tra 0 e *254*... Pignolo....erano le due di notte! :D >La seconda e` che non credo che questa versione sia migliore di quella >precedente: nella prima leggi un byte da /dev/urandom e lo resituisci; nella seconda leggi 4 byte da /dev/urandom, scarti i >primi tre e restituisci il >quarto: non credo ci sia questa grossa differenza... Invece io temo prorio di si...a parte che non volevo usare int ma unsigned int la prima funzione è *errata* o meglio torna risultati non voluti! Provala e capirai. Nella seconda cmq non scarto i primi tre ma uso la matematica dei moduli. Allego un file c. >Terza e ultima osservazione: il codice non e` portabile, dato che non possiamo essere sicuri che su ogni piattaforma un int >occupi sempre 4 byte; sarebbe meglio scrivere read(fd, &randnum, sizeof(randnum)). Nein, la tua soluzione è sicuramente più elegante, tuttavia Ansi C definisce int come word del processore, quindi su piattaforma a 32 bit tale codice è portabile. Se poi tu avevi in mente tutte le piattaforme, anche le 64 e quelle a 16 bit allora ok. ;) G -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.300 / Virus Database: 265.8.5 - Release Date: 03/02/2005 -- Email.it, the professional e-mail, gratis per te: http://www.email.it/f Sponsor: Email.it Phone Card: chiami in tutto il mondo a tariffe imbattibili da tutti i telefoni fissi e cellulari! Clicca e scopri come Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid&86&d=5-2
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> int key1(){ unsigned int randnum,key; int fd = open("/dev/urandom", O_RDONLY); if (fd != -1) { read(fd,&randnum,1); /*non mi ricordo bene la funzione ma se ci ho preso così leggo un byte da /dev/urandom e quindi ho una sequenza di 8 bit che ti da un numero da 0 a 255*/ key = randnum; } close(fd); return key; } int key2(){ unsigned int randnum,key; int fd = open("/dev/urandom", O_RDONLY); if (fd != -1) { read(fd,&randnum,4); /*non mi ricordo bene la funzione ma se ci ho preso così leggo un byte da /dev/urandom e quindi ho una sequenza di 8 bit che ti da un numero da 0 a 255*/ key = randnum; } close(fd); return key; } int key3(){ unsigned int randnum,key; int fd = open("/dev/urandom", O_RDONLY); if (fd != -1) { read(fd,&randnum,4); /*leggi una word da /dev/urandom e quindi ho una sequenza di 32 bit */ key = randnum ; /*genero chiavi nell'insieme 0-255 che se ho capito bene è quello che vuoi tu*/ } close(fd); return key % 256; } int key(){ unsigned int randnum,key; int fd = open("/dev/urandom", O_RDONLY); if (fd != -1) { read(fd,&randnum,4); /*leggi una word da /dev/urandom e quindi ho una sequenza di 32 bit */ key = randnum % 256; /*genero chiavi nell'insieme 0-255 che se ho capito bene è quello che vuoi tu*/ } close(fd); return key; } int main(){ printf ("La kiave è : %u \n", key()); printf ("La kiave 1 è : %u \n", key1()); printf ("La kiave 2 è : %u \n", key2()); printf ("La kiave 3 è : %d \n", key3()); }
No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.300 / Virus Database: 265.8.5 - Release Date: 03/02/2005 ========---------- Archivio delle e-mail postate in lista http://www.freelists.org/archives/lugge/ Prima di scrivere in m-list per favore leggi il regolamento http://www.lugge.net/index.php?mod=cosa_facciamo/gruppo_di_discussione Modifica dell'account sulla lista LUGGe http://www.lugge.net/index.php?mod=cosa_facciamo/gruppo_di_discussione#list