read /dev/urandom 3
Выше не работает .. Как я могу прочитать случайные байты из /dev/urandom
Bash?
bash
random-number-generator
линукс
источник
источник
$()
работает?It treats the output of a command like a variable.
ты ведь имеешь в виду строку, верно?$()
довольно универсальный, а не специфичный для bash. Кстати, будьте осторожны, вы не столкнетесь с ограничениями на то, какие символы оболочка может хранить в переменных - например, версия bash, которую я тестировал, опускает нули (\ x00) из строки.(Если вам нужны буквальные тире-символы, этот тире-символ должен идти в конце строки, как сделано выше, в отличие от
*-_
).И чтобы объяснить, что делается благодаря вышеупомянутому набору команд:
head -c 500 /dev/urandom
: Получить первые 500 символов (байтов) из/dev/urandom
.tr -dc 'a-zA-Z0-9~!@#$%^&*_-'
: Удалить все символы, кроме указанных в'a-zA-Z0-9~!@#$%^&*_-'
выводе первой команды.fold -w 3
: Отформатируйте вывод второй команды так, чтобы в каждой строке было 3 символа.head -n 1
: Показать первую строку результата третьей команды вклstdout
.источник
fold -w 3 | head -n 1
a,head -c 3
если в конце новая строка char не нужна.Illegal byte sequence
ошибкой. Чтобы это исправить, используйте кодировку "C"; измените команду на:head -c 500 /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
Пожалуйста, проверьте
man od
.Вы можете использовать, например,
od -vAn -N4 -tu4 < /dev/urandom
генерировать случайные числа 4 байта без знака.
источник
Вот тот, который создает строки base64, обратите внимание, что, хотя они ограничены строками base64, отступы удаляются из них, поэтому вы не можете их декодировать, возможно, вам это все равно не понадобится.
Замените
5
количество символов, которые вы хотите.Однако если вам по каким-то причинам необходимо декодировать их, перейдите
base64
к концу канала. Затем он соберет 5 символов из urandom и base64 закодирует его с правильным заполнением, но итоговая строка может быть длиннее, чем вы хотели из-за заполнения.источник
cat
будет читать намного больше, чем заданное количествоN
символов, и может истощить энтропию. Не полезный ответ.cat
так какbase64
иhead
может взять имя файла в качестве аргумента, в данном случае он работает и не должен истощать энтропию. См stackoverflow.com/questions/10031344/...Попробуй это:
dd if=/dev/urandom bs=1 count=3
Если вы хотите поместить результат в переменную $:
Обратите внимание, что это, вероятно, не будет для печати.
источник
Самое простое решение будет таким простым:
источник