Я хотел бы создать случайную строку (например, пароли, имена пользователей и т. Д.). Должна быть возможность указать необходимую длину (например, 13 символов).
Какие инструменты я могу использовать?
(Из соображений безопасности и конфиденциальности желательно, чтобы строки генерировались в автономном режиме, а не в Интернете на веб-сайте.)
apg
лично.)apg
для генерации случайной строки./dev/urandom
). Было бы неплохо получить ответы на некоторые вопросы, используя настоящие генераторы случайных чисел, например, на random.org .Ответы:
Мой любимый способ сделать это, используя
/dev/urandom
вместе с,tr
чтобы удалить нежелательных символов. Например, чтобы получить только цифры и буквы:Также можно добавить больше символов из списка специальных символов пароля OWASP :
Если у вас есть проблемы с
tr
жалобами на ввод, попробуйте добавитьLC_ALL=C
вот так:источник
head /dev/urandom | tr -dc A-Za-z0-9 | head -c10
- Этот способ более точен. Вы получаете 10 символов, которые являются прописными, нижними или цифрамиhead
команда может быть проблематичной. Он выведет первые 10 строк/dev/urandom
, что означает, что он остановится, как только увидит 10-ую новую строку. Таким образом, длина вывода, отправляемогоtr
команде, случайна. Возможно, что в выходных данных будет меньше 13 символовtr
. Я не вычислял вероятность этого, вычисления немного хитры.<dev/urandom tr -dc "$charset" | head -c "$length"
tr -dc A-Za-z0-9\!\"#$\&\'\(\)\*+,-./\:\\\\\;\<=\>\?@[]^_`{\|}~
tr ..
командой, но просто цитирование все (кроме одинарных кавычек) работает -tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~'
.Для генерации случайного пароля вы можете использовать
pwgen
:Сгенерируйте 7 паролей длиной 13:
Как упоминалось в комментариях, вы можете избежать уменьшения энтропии с помощью
-s
аргумента (то есть генерировать более безопасные, совершенно случайные, но трудно запоминающиеся пароли):Для генерации случайных имен пользователей вы можете использовать
gpw
:Генерация 7 паролей (имен пользователей) длиной 13:
источник
pwgen -s
.Я использую
openssl
команду, швейцарский армейский нож криптографии.или же
источник
rand -hex
ограничит вывод только 16 символами, а не 90+ на моей клавиатуре. Base64 лучше, потому что это 64 символа, но это не случайно (например, существуют предсказуемые шаблоны заполнения, и, возможно, некоторые символы появляются чаще, чем другие).openssl rand -base64 12
выводится 16 символов (поскольку 256 значений сопоставлены с 64). И шестнадцатеричный пример выдает 24 символа. В случае гексагона нет потерь, так как это простое отображение 1: 2, но может быть немного в случае base64, так как используется заполнение. Основа не влияет на случайность, это способ, которым один сопоставлен с другим, который делает. (и общее количество бит намного важнее).Вот как я это делаю. Он генерирует 10 символов случайной строки. Вы можете оптимизировать его, заменив «свернуть» другими инструментами для обработки строк.
источник
/dev/urandom
конечноЧтобы создать пароль с максимально возможной энтропией с помощью стандартных инструментов Linux, которые встроены в каждый дистрибутив, который я использую:
Это выводит все печатные символы ASCII - от 32 (пробел) до 126 (тильда,
~
). Длина пароля может управляться сhead
русским-c
флагом. Есть также другие возможные наборы символовtr
(чтобы не включать пробел, используйте только символы 33-126[:graph:]
).источник
< /dev/urandom tr -cd '[:graph:]'| tr -d '\\' | head -c 32; echo
если вы не хотите` characters in generated string.
`, потому что во многих языках это экранирующий символ, возникают проблемы< /dev/urandom tr -cd "[:print:]" | tr -d ' \\/\`\|' | head -c 32; echo
исключить | \ / `и космосВ зависимости от уровня случайности, который вы хотите, вы можете просто использовать встроенную переменную bash (также
zsh
иksh
, возможно, других)$RANDOM
:Методы, читающие непосредственно из
/dev/urandom
, намного проще, но для завершения вы также можете использовать$RANDOM
:Важно : это решение будет генерировать только случайные строки, используя первые 10 букв алфавита. Будет ли этого достаточно для вас, зависит от того, для чего вам это нужно.
источник
$RANDOM
напечатает число от 0 до 32767.rand=$(head -c 100 /dev/urandom | tr -dc A-Za-z0-9 | head -c13)
этого.Вдохновленный Пабло Репетто, я получил это легко запоминающееся решение:
-z избегает многострочного вывода
-e повторяем результат
-r разрешить любому персонажу появляться несколько раз
-n20 случайная строка длиной 20 символов
{A..Z} {a..z} {0..9} разрешенные классы символов
shuf
является частью linux coreutils и широко доступна или, по крайней мере, портирована.источник
@Brandin объяснил в комментарии к другому ответу, как получить максимум 100 байтов от
/dev/urandom
использованияhead -c 100
. Еще один способ сделать это сdd
:В
2>/dev/null
концеdd
команды подавляется вывод «... records in / ... records out».Я не знаю каких-либо существенных преимуществ / недостатков между этими двумя методами.
У меня была проблема с обоими методами
tr
жаловаться на ввод. Я думал, что это потому, что ему не нравилось получать бинарный ввод, и поэтому предложил сначала выполнить фильтрацию/dev/random
с помощьюiconv -c -t US
. Однако Жиль предложил другой диагноз и решение, которое работает для меня:источник
iconv
решение использует одно ядро процессора и не дает выходных данных (я подождал несколько секунд, прежде чем его убить) ...libc-bin
2.19. Я не уверен, если это тот же значок ...tr
поддерживает бинарный ввод. Однако на диапазон, на которыйA-Z
могут повлиять настройки локали. ПопробуйтеLC_ALL=C tr …
tr
делает, потому что он вообще не поддерживает многобайтовый режим (например, в прошлый раз, когда я проверял его, изменение регистра осуществлялось путем простой установки шестого бита каждого байта). Другие системы (например, BSD) действительно поддерживают многобайтовый режим, и это потерпит неудачу, поскольку вероятность того, что случайный входной поток также является допустимым многобайтовым потоком, в большинстве кодирований очень мала. GNU может добавить многобайтовую поддержку в любой момент, и в этот момент это не удастся. Конечно, установкаLC_ALL=C
исправит это.tr
обработки двоичного ввода (в языке C). (Ну, ладно, это только говорит явно, что нулевые байты должны поддерживаться, это не говорит, что непустые файлы, не заканчивающиеся символом новой строки, должны поддерживаться, но на практике это всегда так.)APG
включен по умолчанию в некоторых дистрибутивах Linux.Чтобы сгенерировать пароли размером от 5 до 10 в подмножествах Special, Numeric, Capital и Lower, введите команду:
И возвращает
Как сказал @landroni в комментарии.
источник
apg -a1 -m14
Вы можете использовать один из
md5
инструментов, который имеет именно эту цель. В случае создания совершенно случайного пароля вы можете использоватьmd5pass
. Это очень простой в использовании и очень полезный инструмент, поскольку вы можете использовать «обычный текст» вместе с «солью» для создания скачкообразного кода того же пароля, который вы можете восстановить впоследствии, или, в качестве альтернативы, вы можете получить полностью случайный пароль все время. Общее использование:где
password
- выбранное слово, которое будет использоваться для построения случайной строки, иsalt
переход в байтах, который будет использоваться. Нравится:Это создаст для вас пароль с произвольной последовательностью. Если вы используете нет
salt
, то вы не сможете воссоздать эту же строку позже.Однако, если вы используете
salt
как это:затем вы можете создать последовательность, которую вы можете восстановить, если вы используете слово в сочетании с той же солью (или прыжком), если оно было первоначально определено.
источник
salt
, это звучит подобно подходу PasswordMaker ...Используйте
xxd
команду для указания длины (через -l), которая работает как в Linux, так и в ОС. https://www.howtoforge.com/linux-xxd-command/источник
Эти две команды генерируют случайные пароли и парольные фразы соответственно.
Генератору паролей требуется файл file_with_characters, содержащий все символы, которые вы хотите использовать в качестве пароля, по одному символу в строке и ровно по одному разу каждый. Файл не должен содержать пустых строк, а строки должны заканчиваться символом новой строки.
Генератору парольной фразы требуется файл file_with_words, содержащий все слова, которые вы хотите использовать для парольной фразы, по одному слову в строке и ровно по одному разу каждое. Файл не должен содержать пустых строк, а строки должны заканчиваться символом новой строки.
Опция --head-count указывает длину пароля - в символах - или пароль - в словах.
источник
Я обнаружил, что передача / dev / urandom to tr на macOS не работает. Вот еще один способ:
источник
Я использую:
base64 < /dev/urandom | tr -d 'O0Il1+\' | head -c 44
Это дает мне 57 возможных символов. Строка может быть скопирована (удалена
+
и\
) или напечатана и перепечатана, так как трудно различимые символы (I1lO0
) были удалены.Мне это нравится, потому что:
Благодарим https://unix.stackexchange.com/a/230676/9583 и особенно комментарии для моего первоначального вдохновения.
источник
1
без уменьшения энтропии (при создании нового , чтобы получить один ж / число делает уменьшить энтропию). Вы также можете безопасно добавить,!
не уменьшая энтропию. Ни одна из этих схем не увеличивает ценность энтропии, но может привести сгенерированную строку в соответствие со старыми требованиями к паролям.Философия Unix, заключающаяся в том, что «множество небольших инструментов хорошо справляются с одной задачей», очень хорошо вам подходит в этом случае.
/dev/urandom
это поток случайных «байтов» (которые включают непечатаемые символы)base64
кодирует байтовые данные[A-Za-z0-9/+]
(которые полностью печатаются)dd
копирует ввод в вывод, применяя модификаторы, заданные в качестве аргументов (которые могут включать размер блока и количество блоков)OSX
Linux
Примечания:
tr -d '[A-Z/+]'
избавиться от заглавных букв и+
и/
bs
(размер блока) на любую длину, которая вам нужна.base64
по умолчанию переносится на 76 столбцов и должен быть сброшен,-w0
если вы этого не хотите.источник
Я хотел бы добавить свою обычную команду для создания пароля
Чтобы настроить длину пароля, измените число в команде cut на требуемую длину, например, 24 символа.
Не хотите путать 0 или O, 1 или L? Отфильтруйте это с другим
tr
Лично я никогда не предпочитаю специальный символ в пароле, поэтому я выбираю только
[:alnum:]
для своего генератора паролейисточник
Я поддерживаю
secpwgen
Alpine Linux и сохраняю исходники на своем Github .Может генерировать случайные строки или фразы для двусмысленности:
Для генерации случайной строки из 13 символов вы должны использовать:
Чтобы пользователи запомнили пароль, используйте фразы diceware:
Мне лично нравится:
источник
Мой путь для очень безопасного пароля (где 16 - длина pw):
Пример результата:
Или, альтернативно, для создания нескольких паролей:
кот / dev / urandom | tr -cd [: graph:] | fold -w 16 | head -6
Пример результата:
Немного менее безопасно (меньший набор символов):
Пример результата:
источник
Сверхлегкий и простой (возможно, более простой, чем вы ищете) способ добиться этого состоит в том, чтобы сгенерировать случайное число в заданном диапазоне, преобразовать это число в эквивалентный ему символ ASCII и добавить его в конец строки. ,
Вот основной пример в Python:
РЕДАКТИРОВАТЬ: добавлены комментарии и добавлен код для создания нескольких паролей и записи их в файл
источник
Я хотел бы эту команду:
источник
date +%N
как если вы генерируете много пользователей и паролей в скрипте, секунды могут стать одинаковыми для многих или даже для всех команд даты, таким образом, производя идентичные пароли.dd if=/dev/random bs=512 count=1
?Я захожу на http://passwordsgenerator.net/, он позволяет генерировать строки случайных символов длиной до 2048 символов, выбирать верхний регистр, нижний регистр, цифры от 0 до 9, знаки пунктуации или любую комбинацию.
источник