Подтвердить что ты не робот

Как кодировать base64/dev/random или/dev/urandom?

cat /dev/urandom всегда является интересным способом создания прокрутки символов на вашем дисплее, но создает слишком много непечатаемых символов.

Есть ли простой способ закодировать его в командной строке таким образом, что все его выходные данные являются читаемыми символами, например base64 или uuencode.

Обратите внимание, что я предпочитаю решения, которые не требуют создания дополнительных файлов.

4b9b3361

Ответ 1

Что-то вроде

cat /dev/urandom | base64

Что дает (много) вещей вроде

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

Или, без (бесполезной) cat + pipe:

base64 /dev/urandom

(Тот же вид выхода ^^)


EDIT: вы также можете использовать параметр --wrap base64, чтобы избежать "коротких строк":

base64 --wrap=0 /dev/urandom

Это приведет к удалению обертки, и вы получите полноэкранный дисплей ^^

Ответ 2

Несколько человек предложили cat ting и piping через base64 или uuencode. Одна из проблем заключается в том, что вы не можете контролировать, сколько данных читать (это будет продолжаться вечно, или пока вы не нажмете ctrl + c). Другая возможность - использовать команду dd, которая позволит вам указать, сколько данных нужно прочитать перед выходом. Например, чтобы прочитать 1kb:

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

Другой вариант - передать команду strings, которая может дать больше разнообразия в своем выходе (непечатаемые символы отбрасываются, отображаются любые прогоны из менее чем 4 печатных символов [по умолчанию]). Проблема с strings заключается в том, что она отображает каждый "запуск" в своей собственной строке.

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

(конечно, вы можете заменить всю команду

strings /dev/urandom

если вы не хотите, чтобы он когда-либо останавливался).

Если вы хотите что-то действительно напуганное, попробуйте один из:

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

Ответ 3

Итак, что не так с

cat /dev/urandom | uuencode -

?

Исправлено после первой попытки на самом деле не работало...:: sigh::

BTW. Многие утилиты unix используют "-" вместо имени файла, чтобы означать "использовать стандартный ввод".

Ответ 4

Уже есть несколько хороших ответов на то, как base64 кодирует случайные данные (т.е. cat /dev/urandom | base64). Однако в теле вашего вопроса вы уточняете:

... закодировать [urandom] в командной строке таким образом, чтобы все его выходные данные были читаемыми символами, например base64 или uuencode.

Учитывая, что на самом деле вы не требуете синтаксического анализа base64 и просто хотите, чтобы он был доступен для чтения, я бы предложил

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

base64 выводит только буквенно-цифровые символы и два символа (+ и/по умолчанию). [:graph:] будет соответствовать любому печатаемому non-whitespace ascii, включая множество символов/знаков препинания, которых недостает base64. Поэтому использование tr -dC '[:graph:]' приведет к более случайному отображению вывода и улучшит эффективность ввода/вывода.

Я часто использую < /dev/random stdbuf -o0 tr -Cd '[:graph:]' | stdbuf -o0 head --bytes 32 для генерации надежных паролей.

Ответ 5

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

Ответ 6

Вы можете сделать более интересные вещи с помощью BASH FIFO-труб:

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

Ответ 7

Try

xxd -ps /dev/urandom

xxd(1)