Как кодировать base64/dev/random или/dev/urandom?
cat /dev/urandom
всегда является интересным способом создания прокрутки символов на вашем дисплее, но создает слишком много непечатаемых символов.
Есть ли простой способ закодировать его в командной строке таким образом, что все его выходные данные являются читаемыми символами, например base64 или uuencode.
Обратите внимание, что я предпочитаю решения, которые не требуют создания дополнительных файлов.
Ответы
Ответ 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)