2009-08-08 14 views
33

cat /dev/urandom to zawsze fajny sposób tworzenia przewijanych znaków na ekranie, ale powoduje zbyt wiele niedrukowalnych znaków.Jak kodować base64/dev/random lub/dev/urandom?

Czy istnieje prosty sposób kodowania go w linii poleceń w taki sposób, że wszystkie jego dane wyjściowe są czytelnymi znakami, na przykład base64 lub uuencode.

Pamiętaj, że preferuję rozwiązania, które nie wymagają tworzenia dodatkowych plików.

+14

Jesteś zdecydowanie niezwykła w swojej definicji "zabawy". –

Odpowiedz

44

Co o coś

cat /dev/urandom | base64 

co daje (wiele) rzeczy jak

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 

albo bez (niepotrzebnych) kota + rury:

base64 /dev/urandom 

(Ten sam rodzaj wyjścia ^^)


EDIT: można również użytkownik opcja base64--wrap, aby uniknąć konieczności "krótkich linii":

base64 --wrap=0 /dev/urandom 

Spowoduje to usunięcie opakowania, a otrzymasz "full-screen" wyświetlacz ^^

+0

wow ... Czuję teraz zawroty głowy. –

+19

"Widzę teraz tylko blondynkę, brunetkę, rudego". – alexanderpas

+0

@Stefano: ja też :-D; @alexanderpas: jeśli oglądanie losowych przewijanych znaków sprawia, że ​​widzisz tego rodzaju postacie, może powinienem częściej oglądać losowe postacie ^^ –

4

Więc co jest nie tak z

cat /dev/urandom | uuencode - 

?

Poprawiono po to pierwsza próba w rzeczywistości nie działa ... :: wzdychać ::

BTW-- Wiele narzędzi systemu Unix używać „-” zamiast nazwy pliku oznacza „użyć standardowego wejścia”.

+0

nie wiedział o opcji kreska. dzięki za uczenie mnie, że;) – alexanderpas

+0

(właściwie myślnik oznacza w tym przypadku stdout) Bezużyteczne użycie 'cat' - zrób to zamiast:' uuencode/dev/random -' –

17

Wiele osób zasugerowało cat i podłączyło się przez base64 lub uuencode. Jednym z problemów jest to, że nie można kontrolować, ile danych do odczytu (będzie trwać wiecznie lub do momentu naciśnięcia ctrl + c). Inną możliwością jest użycie polecenia dd, które pozwoli ci określić ilość danych do odczytania przed wyjściem. Na przykład w celu odczytu 1KB:

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

Inną możliwością jest rura z poleceniem strings które mogą spowodować większą różnorodność w wyjściu (znaki nie-drukowania są zużyte, wszelkie przebiegi najmniej 4 znaków widocznych [domyślnie] są wyświetlane). Problem z strings polega na tym, że wyświetla każdy "bieg" w osobnej linii.

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

(oczywiście można zastąpić całą komendę z

strings /dev/urandom 

jeśli nie chcesz, żeby kiedykolwiek przestać).

Jeśli chcesz coś naprawdę ostry, spróbuj jednego z:

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

Lub ' head -c 100' na przykład wypisze pierwsze 100 bajtów pliku. –

+0

Jeśli używasz ciągów, możesz również usunąć nowe linie z dodatkowym potokiem: 'string/dev/urandom | perl -pe 's/\ n //' ' – mivk

1

Można zrobić więcej ciekawych rzeczy z FIFO rur atakujących za:

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

Spróbuj

xxd -ps /dev/urandom 

xxd(1)

+0

Spowoduje to utworzenie szesnastkowego/base16 not base64 –

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

To zły sposób na zrobienie tego. To nie jest Base64, brak konwersji dwóch symboli, więc jest bardziej podobny do Base62, a więc odkodowane wartości będą stronnicze, np. nie tak losowe. – ydroneaud

3

Istnieje już kilka dobrych odpowiedzi na temat kodowania losowych danych base64 (tj. cat /dev/urandom | base64). Jednak w ciele swoim pytaniu opracować:

... kodują [urandom] w linii poleceń w taki sposób, że wszystko to jest wyjście to znaki czytelne, base64 lub UUEncode na przykład.

Biorąc pod uwagę, że w rzeczywistości nie wymaga parsowalnym base64 i po prostu ma to być czytelna, sugeruję

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

base64 wysyła tylko znaki alfanumeryczne oraz dwa symbole (+ i/domyślnie) . [:graph:] będzie pasować do wszelkich drukowalnych, nie zawierających białych znaków, ascii, w tym wiele symboli/znaków interpunkcyjnych, których nie ma w base64. Dlatego użycie wartości tr -dC '[:graph:]' spowoduje bardziej losowy wygląd i lepszą wydajność wejścia/wyjścia.

Często używam < /dev/random stdbuf -o0 tr -Cd '[:graph:]' | stdbuf -o0 head --bytes 32 do generowania silnych haseł.

+0

bezużyteczne użycie kota (UUoC) - rozważ zamiast tego 'tr -dC '[: graph:]' RubyTuesdayDONO