Newsgroup: it.comp.java
Titolo: Stringa casuale

Devo generare una stringa completamente casuale. La stringa deve essere 
alfanumerica minuscola, e quindi composta solo da caratteri presenti nel 
seguente insieme: [a..z]+[0..1].
Vorrei usare la classe SecureRandom, pensavo di fare più o meno così:
private final int LENGTH = 8;
private final int MAX_RANGE = ???;
private final int OFFSET = ???;
SecureRandom srnd = SecureRandom.getInstance("SHA1PRNG");
StringBuffer sb = new StringBuffer(LENGTH);
float f = 0.0f;
int c = 0;
for (int i = 1; i <= sb.length(); i++) {
   f  = (srnd.nextFloat() * MAX_RANGE) + OFFSET;
   c = Math.round(f);
   sb.append((char)c);
}
srnd.nextFloat() restituisce un valore nell'intervallo [0.0f, 1.0f).
Come faccio a "beccare" l'intervallo [a..z]+[0..1]? Che valori devo 
mettere a MAX_RANGE e OFFSET? DOve trovo una tabella UNICODE?
Grazie per l'attenzione, ciao!
GePs

 }
CarloP.

 CarloP.
Grazie! :)
-- 
Se libertà in fondo significa qualcosa, significa il diritto di dire 
alla gente quello che non vuole sentire.
(George Orwell)

 ha scritto nel messaggio
news:_%h3c.57426$Kc3.1...@twister2.libero.it...
[ Perchč non fai scegliere le pwd all'utente? ]
Io farei cosě:
private static String simboli =
"abcdefghijklmnopqrstuvwxyz0123456789";
public static String generaPwd(int lunghezzaPwd){
  String pwd = "";
  for(int i=0; i<lunghezzaPwd; i++){
    int rndIndex =
(int)Math.round(srnd.nextFloat()*(simboli.length()));
    pwd += simboli.charAt(rndIndex);
  }
  return pwd;
}
Cosě potrei mettere i simboli che mi pare :-)
Ciao,
GianpieroP
-----BEGIN PGP SIGNATURE-----
Version: PGP 8.0
iQA/AwUBQE5HbJ4sPKh9SaicEQK31gCghcLQSyYK32R/5teKlAQEQv/wA+sAoJhu
hjq0s86jGvcUrM5Tn+tn0k8w
=XWS+
-----END PGP SIGNATURE-----

 ha scritto nel
messaggio news:LLr3c.1334$5h5....@tornado.fastwebnet.it...
|     int rndIndex =
| (int)Math.round(srnd.nextFloat()*(simboli.length()));
rettifico:
int rndIndex = (int)(srnd.nextFloat()*(simboli.length()));
Cioč senza la funzione round (altrimenti avrei
l'agginuta di 1/2. vedi API).
Di nuovo,
GianpieroP
-----BEGIN PGP SIGNATURE-----
Version: PGP 8.0
iQA/AwUBQE5MZ54sPKh9SaicEQKvtgCfYdRrkb64XnAMBIqo1Pc1VdfgfWQAoKT7
UzjSPoopi3663XnTgTm9jlLC
=wvs2
-----END PGP SIGNATURE-----

 Così potrei mettere i simboli che mi pare :-)
Deve essere sicuramente più veloce. Grazie! :)

 ha scritto nel messaggio
news:_EC3c.59565$Kc3.1...@twister2.libero.it...
x/p su it.comp.sicurezza.crittografia
Per quanto riguarda l'alfabetizzazione informatica
dell'italiano medio ti capisco (mica solo italiano?).
Per questo dobbiamo sentirci obbligati a volte
a imporre all'utente medio operazioni un po' più
professionali.
Pensa al fatto che se la pwd è completamente
casuale (generata random dal sistema) l'utente
deve necessariamente segnarsela da qualche
parte commettendo un grave errore che attenta
alla segretezza della pwd. Ma se, come per il
tuo caso, la pwd è una OTP (One Time Password)
allora il problema non si pone.
Se la pwd, invece, costituisce una credenziale
di accounting e se proprio non vuoi farla scegliere
all'utente, potresti usare una tecnica di sillabazione
random: così diventa più pronunciabile e quindi
l'utente non è costretto a segnarsela (almeno si
spera. Per lui).
| Deve essere sicuramente più veloce. Grazie! :)
Non parlerei di velocità con un insieme di cardinalità 8!
Piuttosto la mia soluzione mi sembra più versatile:
puoi usare un insieme di simboli che vuoi.
Ad esempio potresti generare stringhe binarie
semplicemente definendo:
static private String simboli = "01";
Ottali: "01234567", e così via.
Ciao,
GianpieroP
-----BEGIN PGP SIGNATURE-----
Version: PGP 8.0
iQA/AwUBQE+cEZ4sPKh9SaicEQK09gCgyOmP57GKlk4lVp7iHRWMkLEvgusAnRJc
zBRPatuyoCD70ZtCJ7Yt+TzN
=QMz9
-----END PGP SIGNATURE-----