PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bash - zufallszahlen erzeugen



meinereinerseiner
24-07-2004, 17:43
hi,

wie erzeuge ich mir denn einen zufälligen string aus 32 zeichen, wobei
nur 0-9 und a-f zulässig ist.
kann mann da /dev/urandom missbrauchen und das dann umwandeln?

danke
der tom

peschmae
24-07-2004, 18:27
$RANDOM gibt pseudozufallszahlen zwischen 0 und 32767 zurück. Nun musst du das eigentlich nur noch auf 0-16 beschränken und (mit Printf oder so) die Dezimalen als Hex ausgeben.

Einfacher gehts aber mit:
head -c16 /dev/urandom | od -N16 -txL | sed -ne "1s/^0* //p" | sed s/\ //g

Kürzer wäre
od -N16 -txL /dev/urandom | sed -ne "1s/^0* //" -ne "s/ //gp"
hab das vorher nicht mit nur einem sed hingekriegt weil das -n den Output unterdrückt und ich deshalb natürlich beim zweiten Ausdruck die Sache explizit ausgeben muss. Zudem ist das head überflüssig.


MfG Peschmä

meinereinerseiner
24-07-2004, 19:12
cool - geniale sache - vielen dank!

ThorstenS
25-07-2004, 09:30
Ich finde md5sum eignet sich sehr gut für sowas.

Wenn du einen Server hast, auf dem viel los ist, könntest du auch sowas basteln:
ps aux | md5sum - damit hast du 32 'Zufallszahlen'.

Bsp.: debian:/etc/# ps aux | md5sum
dd0ca769b1b935a00219072eb505b46c

Dadurch, dass schon durch den Lauf deines Aurufs mind. eine eue/geänderte PID auftaucht, ist es in meinen augen hinreichen zufällig genug.

EDIT:
Einen guten Zeitvorteil hat Peschmaes Lösung aber allemal (nur merken kann man sie sich nicht ;)


debian:/etc/X11# time ps aux | md5sum
2352f7764dfc4932fbd98fb2e77c3ad8

real 0m0.030s
user 0m0.015s
sys 0m0.015s

time od -N16 -txL /dev/urandom | sed -ne "1s/^0* //" -ne "s/ //gp"
2a45bdece07a9702730ab623f7abb7b0

real 0m0.005s
user 0m0.000s
sys 0m0.005s

RapidMax
25-07-2004, 20:53
Oder auch:

xxd -l 16 -ps -c 16 /dev/urandom
Gruss, Andy

PS: Muss die Zufallszahl kryptographisch sicher sein?