Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [Java] securerandom

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    232

    [Java] securerandom

    Salve devo generare una "nonce" e ho pensato di usare la libreria java security. Ho solo un dubbio sulla generazione di questi numeri random perchè girando su internet ho trovato:
    codice:
    SecureRandom srandom = new SecureRandom.getInstance("SHA1PRNG");
    byte bytes[] = new byte[20];
    random.nextBytes(bytes);
     System.out.println(" Secure Random # generated by calling nextBytes() is " + srandom.nextInt());
    nextBytes non serve a riempire l'array di byte? come fa srandom a creare un numero random?
    inoltre se faccio la stampa dell'array ottengo 20 numeri casuali... qual'è il risultato giusto???

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da 5t4rdu5t Visualizza il messaggio
    nextBytes non serve a riempire l'array di byte?
    Esatto, appunto.

    Quote Originariamente inviata da 5t4rdu5t Visualizza il messaggio
    come fa srandom a creare un numero random?
    In maniera (pseudo)casuale ma molto più "strong" rispetto al più banale java.util.Random. Qualche dettaglio su SHA1PRNG è nella documentazione ufficiale:
    https://docs.oracle.com/javase/8/doc...l#SecureRandom

    inoltre se faccio la stampa dell'array ottengo 20 numeri casuali... qual'è il risultato giusto???[/QUOTE]
    Ma è proprio così ... sono appunto 20 byte i cui valori sono fortemente casuali.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    232
    Mi scuso se ho sbagliato sezione... mi è proprio sfugita questa sezione.. comunque okk...grazie per la risposta. Ma se voglio solo un numero random usando entropia basta solo srandom.nextInt() ?????

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da 5t4rdu5t Visualizza il messaggio
    Ma se voglio solo un numero random usando entropia basta solo srandom.nextInt() ?????
    Cosa intendi/ti aspetti con "usando entropia"? Nella teoria della informazione, la "entropia" indica la quantità di informazione di un certo messaggio (spero di averlo detto in modo giusto, correggetemi se sbaglio). Un messaggio scontato, banale come "abcdefghi" ha una entropia più bassa rispetto ad un messaggio "gaefdhicb".

    Quindi cosa ti aspetti dicendo "usando entropia"? SecureRandom è un cryptographically strong random number generator che ha una qualità (nel senso della casualità) molto più alta rispetto al basilare java.util.Random.
    Detto questo, non saprei cosa altro dirti ... se ti serve una alta qualità nella generazione dei valori casuali, usa SecureRandom, altrimenti il basilare java.util.Random.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    232
    Dalla documentazione, quello che ho capito io, securerandom sfrutta /dev/urandom in ambiente unix per rafforzare il random classico di java. Con rafforzare intendo che l'entropia intesa come grado di randomicità è eleveta. Comunque facendo solo srandom.nextInt() posso ritenermi già soddisfatto??? Perchè se mi serve un rumero random diciamo "vero" non ha senso che uso nextByte o generateSeed come nell'esempio della documentazione...

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    232
    Quote Originariamente inviata da 5t4rdu5t Visualizza il messaggio
    Dalla documentazione, quello che ho capito io, securerandom sfrutta /dev/urandom in ambiente unix per rafforzare il random classico di java. Con rafforzare intendo che l'entropia intesa come grado di randomicità è eleveta. Comunque facendo solo srandom.nextInt() posso ritenermi già soddisfatto??? Perchè se mi serve un rumero random diciamo "vero" non ha senso che uso nextByte o generateSeed come nell'esempio della documentazione...
    ho trovato la soluzione: securerandom se invocato senza alcun parametro specificato, intendo il suo costruttore, genera automaticamente un seed leggendo l'entropia del SO da /dev/urandom utilizzando SHA1PNRG a 160 bit.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.