Creare stringhe di caratteri random in BASH

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Xfight
Prode Principiante
Messaggi: 25
Iscrizione: martedì 28 febbraio 2006, 9:32

Creare stringhe di caratteri random in BASH

Messaggio da Xfight »

Salve,
volevo sapere se esiste un modo per poter generare una stringa di lunghezza fissa ( settata come argomento dello script ) usando /dev/urandom in bash oppure se l'unico modo per farlo è usare un array con tutto l'alfabeto e prendendo numeri a random si sceglie in corrispondenza un carattere a random ^^

Inoltre volevo sollevare una questione sulla randomizzazione di /dev/random /dev/urandom e $RANDOM :
in giro ho letto che la migliore è /dev/random perchè randomizza in base agli eventi di un utente che fa davanti al pc, mentre /dev/urandom funziona in modo simile a /dev/random ma anche se non si fanno azioni al pc riesce a creare una sequenza di valori a random molto verosimile. Mentre $RANDOM si dice che non randomizza bene i numeri in quando segue sempre un seed ( che può essere cambiato ).

Spero che qualcuno possa darmi delucidazioni in merito ^^.
Cmq sono maggiormente interessato al primo quesito, cioè fare una stringa di caratteri random in bash usando /dev/urandom.

Ciauzzz & Grazie ^^
Avatar utente
difesaparcosempione
Rampante Reduce
Rampante Reduce
Messaggi: 6031
Iscrizione: giovedì 27 luglio 2006, 19:06
Località: Torino
Contatti:

Re: Creare stringhe di caratteri random in BASH

Messaggio da difesaparcosempione »

Cosa ci devi fare con la stringa ?
se devi aprire/creare file con nomi sempre nuovi ci sono le primitive C per farlo!

ciao
M4rc0s
Prode Principiante
Messaggi: 131
Iscrizione: domenica 3 dicembre 2006, 9:35

Re: Creare stringhe di caratteri random in BASH

Messaggio da M4rc0s »

In passato ho usato questo comando per generare chiavi wep random a 128 bit:

Codice: Seleziona tutto

dd if=/dev/random bs=1 count=16 2>/dev/null | hexdump -e '16/1 "%02x" "\n"'
Xfight
Prode Principiante
Messaggi: 25
Iscrizione: martedì 28 febbraio 2006, 9:32

Re: Creare stringhe di caratteri random in BASH

Messaggio da Xfight »

In pratica, mi è stato chiesto di svolgere un esercizio e di creare stringhe di caratteri casuali di lunghezza presa in input. I caratteri devono essere [a-z], quindi minuscoli e dalla a alla z.

Scusate se non ho specificato ^^
Avatar utente
Volans
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4915
Iscrizione: domenica 4 dicembre 2005, 11:25
Contatti:

Re: Creare stringhe di caratteri random in BASH

Messaggio da Volans »

Una cosa fatta proprio al volo sfruttando la riga di M4rc0s che ringrazio ;) :

Codice: Seleziona tutto

#!/bin/bash

if [ $1 -gt 0 ]
then
        numero=$(($1**2))
        dd if=/dev/random bs=1 count=$numero 2>/dev/null | hexdump -e $numero'/1 "%02x" "\n"' | sed s/'[^a-z]'//g | cut -c-$1
else
        echo "Utilizzo: nomeprogramma numero"
fi
exit 0
Spero vada bene per quello che ti serve.
Ultima modifica di Volans il giovedì 21 giugno 2007, 19:00, modificato 1 volta in totale.
Volans
Prima di scrivere leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Xfight
Prode Principiante
Messaggi: 25
Iscrizione: martedì 28 febbraio 2006, 9:32

Re: Creare stringhe di caratteri random in BASH

Messaggio da Xfight »

Volans ha scritto: Una cosa fatta proprio al volo sfruttando la riga di M4rc0s che ringrazio ;) :

Codice: Seleziona tutto

#!/bin/bash

if [ $1 -gt 0 ]
then
        numero=$(($1**2))
        dd if=/dev/random bs=1 count=$numero 2>/dev/null | hexdump -e $numero'/1 "%02x" "\n"' | sed s/'[^a-z]'//g | cut -c-$1
else
        echo "Utilizzo: nomeprogramma numero"
fi
exit 0
Spero vada bene per quello che ti serve.
Ti ringrazio per la risposta, però il fatto che la sequenza di caratteri random vengano tradotti in hex fa in modo che possa avere solo i caratteri [a-f] mentre a me servono caratteri da [a-z]. Cmq lo script che hai scritto è praticamente quello che mi serve, solo che invece di fare la conversione in hex mi serve la conversione in [a-z].

Attendo news. Grazie per le risposte ^^
M4rc0s
Prode Principiante
Messaggi: 131
Iscrizione: domenica 3 dicembre 2006, 9:35

Re: Creare stringhe di caratteri random in BASH

Messaggio da M4rc0s »

Codice: Seleziona tutto

dd if=/dev/random bs=1 count=16 2>/dev/null | od -c | sed s/'[^a-z]'//g
Così ottieni una conversione in caratteri ascii. Il problema è che non tutte le sequenze "random" di bit corrispondono a caratteri a-z, di conseguenza anche il numero di lettere che ottieni è random  :-\

Mi sa che bisogna seguire un'altra strada
M4rc0s
Prode Principiante
Messaggi: 131
Iscrizione: domenica 3 dicembre 2006, 9:35

Re: Creare stringhe di caratteri random in BASH

Messaggio da M4rc0s »

Risolto  :)
Sicuramente è poco "elegante", però è l'unica cosa che mi è venuta in mente.

Codice: Seleziona tutto

#!/bin/bash

Lettere="a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z"

lettere=($Lettere)
num_lettere=${#lettere[*]}

echo "${lettere[$((RANDOM%num_lettere))]}"
Mettici un bel ciclo for esterno e dovresti aver risolto.
Xfight
Prode Principiante
Messaggi: 25
Iscrizione: martedì 28 febbraio 2006, 9:32

Re: Creare stringhe di caratteri random in BASH

Messaggio da Xfight »

Grazie mille ^^
Avatar utente
Volans
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4915
Iscrizione: domenica 4 dicembre 2005, 11:25
Contatti:

Re: Creare stringhe di caratteri random in BASH

Messaggio da Volans »

Hai ragione, scusa non avevo pensato che in hex erano solo le prime... :)
Non so se c'è un modo per convertire dd in ascii direttamente, mi sembra che il conv del suo man non serva a questo.
Volans
Prima di scrivere leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti