Random text generálás

Szükségem volt egy olyan eljárásra, ahol a shell script-jeimből kimenetet tudok tolni egy fájlba, de visszatérően mindig ugyan abba és script-enként különbözőbe, meg még véletlen szerűen kell hogy hasson, plusz a fájl név is csak ascii karakterekből állhat.

Eddig ezzel álltam elő:

LOG="$0".$(echo -n "$0" | md5sum | base64 | dd bs=1 count=8 2>/dev/null).log

Ha a script név script.sh, akkor a kimenet:

script.sh.OGU2YWZk.log

Tud valaki egyszerűbbet? (pl. od paranccsal bűvészkedés akár)

Kieg.: úgyis fogalmazhatnék, hogy véletlenszerűnek ható byte sorozat előállítása érdekelne, ahol adott bemenettől függ a kimenet, tehát reprodukálható a minta, de nem úgy mint a hash parancsok kimenete, ahol minden karakternél a 8 bitből a felső 4 nulla, hanem sűrű bináris kimenet kellene néha.

Vagy másik kérdés: hogy tudom összetolni a hash karakteres kimenetet?

Tehát a 00001101 biteket 1101-re, és ezt karakterenként? Van erre valami fancy cli parancs amit még nem találtam meg?

Hozzászólások

most 'hex to binary' kulcsszóval keresgélek, ugye a hash-t szét lehetne dobatni | hd -val, aztán azt vissza binárisba. azt hittem xxd parancs lesz a megoldás, de nem.

ez volt a barátom a manual-ból:

-r | -revert

reverse operation: convert (or patch) hexdump into binary. If not writing to stdout, xxd writes into its output file without truncating it. Use the combination -r -p to read plain hexadecimal dumps without line number information and without a particular column layout. Additional Whitespace and line-breaks are allowed anywhere.

Bar mar megoldottad, de talan segit masnak:
"véletlenszerűnek ható byte sorozat előállítása érdekelne, ahol adott bemenettől függ a kimenet, tehát reprodukálható a minta"

Neumanneknak volt egy hasonlo problemajuk annakidejen. Ok alveletlen (pszeudorandom) szamokkal oldottak meg. Kell egy seed, azt letarolod, es utana ebbol generalod a szamaidat. Ha kesobb megint ugyanez a szamsorozat kell, akkor ugyanazzal a seeddel megkaphato. Mas seed viszont eltero szamsort eredmenyez.

Ha az adott rendszerben/kornyezetben nincs, vagy csak kenyelmetlenul elerheto a pszeudorandom generator, akkor itt a man 2 rand peldakodja:


           static unsigned long next = 1;

           /* RAND_MAX assumed to be 32767 */
           int myrand(void) {
               next = next * 1103515245 + 12345;
               return((unsigned)(next/65536) % 32768);
           }

           void mysrand(unsigned seed) {
               next = seed;
           }

Statisztikailag viszonylag szep szamokat ad, es csak elemi muveletekbol all, szoval barhol implementalhato.

--
Auto correct can go straight to He'll.

Az én verzióm:

xxd -l 16 -p /dev/urandom

Ezzel akárilyen hosszú string generálható. Ha esetleg valahol nincs xxd, akkor az alternatív megoldás:

od /dev/urandom -N 8 -A n -t x8

Ennek a kimenete viszont tagolt, ha hosszú kell, a whitespace karaktereket ki kell szedni.

Ha a /dev/urandom nem elég véletlen, akkor használható a /dev/random is.

--
Debian - The "What?!" starts not!
http://nyizsa.uni.cc