2009-08-08 13 views
33

cat /dev/urandom è sempre un modo divertente per creare caratteri di scorrimento sul display, ma produce troppi caratteri non stampabili.Come codificare base64/dev/random o/dev/urandom?

C'è un modo semplice per codificarlo sulla riga di comando in modo tale che tutti i suoi output siano caratteri leggibili, base64 o uuencode per esempio.

Si noti che preferisco soluzioni che non richiedono la creazione di file aggiuntivi.

+14

Sei decisamente insolito nella tua definizione di "divertimento". –

risposta

44

Che dire qualcosa di simile

cat /dev/urandom | base64 

che dà (un sacco di) roba del genere

hX6VYoTG6n+suzKhPl35rI+Bsef8FwVKDYlzEJ2i5HLKa38SLLrE9bW9jViSR1PJGsDmNOEgWu+6 
HdYm9SsRDcvDlZAdMXAiHBmq6BZXnj0w87YbdMnB0e2fyUY6ZkiHw+A0oNWCnJLME9/6vJUGsnPL 
TEw4YI0fX5ZUvItt0skSSmI5EhaZn09gWEBKRjXVoGCOWVlXbOURkOcbemhsF1pGsRE2WKiOSvsr 
Xj/5swkAA5csea1TW5mQ1qe7GBls6QBYapkxEMmJxXvatxFWjHVT3lKV0YVR3SI2CxOBePUgWxiL 
ZkQccl+PGBWmkD7vW62bu1Lkp8edf7R/E653pi+e4WjLkN2wKl1uBbRroFsT71NzNBalvR/ZkFaa 
2I04koI49ijYuqNojN5PoutNAVijyJDA9xMn1Z5UTdUB7LNerWiU64fUl+cgCC1g+nU2IOH7MEbv 
gT0Mr5V+XAeLJUJSkFmxqg75U+mnUkpFF2dJiWivjvnuFO+khdjbVYNMD11n4fCQvN9AywzH23uo 
03iOY1uv27ENeBfieFxiRwFfEkPDgTyIL3W6zgL0MEvxetk5kc0EJTlhvin7PwD/BtosN2dlfPvw 
cjTKbdf43fru+WnFknH4cQq1LzN/foZqp+4FmoLjCvda21+Ckediz5mOhl0Gzuof8AuDFvReF5OU 

Or, senza la (inutile) cat + Tubo:

base64 /dev/urandom 

(Stesso tipo di output ^^)


EDIT: è anche possibile all'utente la possibilità di --wrapbase64, per evitare di avere "brevi linee":

base64 --wrap=0 /dev/urandom 

Questo eliminerà involucro, e si otterrà visualizzazione "full-screen" ^^

+0

wow ... Mi sento stordito ora. –

+19

"Tutto quello che vedo ora è bionda, bruna, rossa." – alexanderpas

+0

@Stefano: così ho fatto io :-D; @alexanderpas: se guardi caratteri a scorrimento casuale ti fa vedere quel tipo di personaggi, forse dovrei guardare i personaggi casuali più spesso ^^ –

4

Quindi, ciò che è sbagliato con

cat /dev/urandom | uuencode - 

?

fissato dopo il primo tentativo non ha mai funzionare ... :: sospiro ::

BTW-- Molte utility Unix usano '-' al posto di un nome di file per significare "usare lo standard input".

+0

non sapeva l'opzione del trattino. grazie per avermi insegnato questo;) – alexanderpas

+0

(in realtà il trattino significa stdout in questo caso) Uso inutile di 'cat' - fallo invece:' uuencode/dev/random -' –

17

Un numero di persone ha suggerito cat ting e piping tramite base64 o uuencode. Un problema con questo è che non è possibile controllare quanti dati leggere (continuerà per sempre o finché non si preme ctrl + c). Un'altra possibilità è usare il comando dd, che ti permetterà di specificare quanti dati leggere prima di uscire. Ad esempio, per leggere 1kb:

dd if=/dev/urandom bs=1k count=1 2>/dev/null | base64 

Un'altra opzione è quella di tubo per il comando strings che può dare più varietà nella sua uscita (caratteri non stampabili vengono eliminate eventuali piste di almeno 4 caratteri stampabili [default] sono visualizzati). Il problema con strings è che visualizza ogni "esecuzione" sulla propria linea.

dd if=/dev/urandom bs=1k count=1 2>/dev/null | strings 

(naturalmente è possibile sostituire l'intero comando con

strings /dev/urandom 

se non si vuole che si fermi mai).

Se volete qualcosa di veramente originale, provare una delle:

cat -v /dev/urandom 
dd if=/dev/urandom bs=1k count=1 2>/dev/null | cat -v 
+3

o ' head -c 100', ad esempio, stamperebbe i primi 100 byte del file. –

+0

Se si usano stringhe, è anche possibile rimuovere le nuove righe con una pipe aggiuntiva: 'stringhe/dev/urandom | perl -pe 's/\ n //' ' – mivk

1

È possibile fare cose più interessanti con tubi di FIFO di bash:

uuencode <(head -c 200 /dev/urandom | base64 | gzip) 
-1

Prova

xxd -ps /dev/urandom 

xxd(1)

+0

Questo produrrà esadecimale/base16 non base64 –

2
cat /dev/urandom | tr -dc 'a-ZA-Z0-9' 
+1

Questo è il modo sbagliato per farlo. Non è Base64, la conversione non ha due simboli, quindi è più simile a Base62 e quindi i valori decodificati saranno distorti, ad es. non così casuale. – ydroneaud

3

Esistono già molte buone risposte su come codificare base64 dati casuali (ad es. cat /dev/urandom | base64). Tuttavia nel corpo della tua domanda si elaborata:

... encode [urandom] sulla riga di comando in modo tale che tutto il suo output sono caratteri leggibili, base64 o uuencode per esempio.

Dato che non lo fanno effettivamente necessario base64 parseable e solo vuole che sia leggibile, io suggerirei

cat /dev/urandom | tr -dC '[:graph:]' 

base64 emette solo caratteri alfanumerici e due simboli (+ e/per impostazione predefinita) . [:graph:] corrisponderà a tutti gli ascii non spazi bianchi stampabili, compresi molti simboli/segni di punteggiatura a cui manca Base64. Pertanto, utilizzando tr -dC '[:graph:]' si otterrà un output più casuale e una migliore efficienza di input/output.

Spesso utilizzo < /dev/random stdbuf -o0 tr -Cd '[:graph:]' | stdbuf -o0 head --bytes 32 per generare password complesse.

+0

uso inutile di cat (UUoC) - considera invece 'tr -dC '[: graph:]' RubyTuesdayDONO