Я хочу создать случайный пароль, и я делаю это так:
</dev/urandom tr -dc [:print:] | head -c 64
На моем ноутбуке, на котором работает Ubuntu, он производит только печатные символы, как и предполагалось. Но когда я захожу на сервер моей школы, на котором работает Red Hat Enterprise Linux, и запускаю его там, я получаю вывод 3!ri�b�GrӴ��1�H�<�oM����&�nMC[�Pb�|L%MP�����9��fL2q���IFmsd|l�K
, который не будет работать вообще. Что может быть не так?
:graph:
вместо:print:
:</dev/urandom LC_ALL=C tr -dc '[:graph:]' | head -c 64
Рассмотрим вместо
Это имеет два преимущества:
Вы читаете только 48 байтов со случайного устройства, а не ~ 8 КБ; если другие процессы на том же хосте нуждаются в случайных числах, 8 КБ, истощенных сразу, могут стать серьезной проблемой. (Да, возможно , никто не должен быть с помощью блокировки случайного устройства, но люди делают .)
Вывод
base64
практически не содержит символов со специальными значениями. (Ибо никто вообще, клейкости| tr +/ -_
на конце, и (как в приведенном примере) убедитесь , что число байтов ввода , чтобыbase64
это кратно 3.)Пароль, сгенерированный таким образом, имеет ровно 384 бита энтропии, что несколько меньше, чем вы делали (журнал 2 96 64 ≈ 421,4), но более чем достаточно для большинства целей (256 бит энтропии безопасны, «все еще догадываясь, когда Солнце выжигает "территорию за исключением ключей RSA, AFAIK).
источник
Другие люди уже указывали, что локаль определяет, что
[:print:]
значит. Однако не все печатные символы подходят для паролей (даже в ascii). Вы действительно не хотите пробелов, табуляции и # $% ^? в вашем пароле - это не просто сложно запомнить, это также потенциально опасно для базовой системы аутентификации, может быть невозможно ввести в поле ввода и т. д. В этом случае вам просто нужно вручную выбрать «нормальные» символы:или просто
Или даже лучше, используйте
base64
как предложено в других ответах.источник
?
или^
слишком плоха, чтобы воспринимать ее всерьез.[:print:]
класс C не входят вкладки. Это только[:alnum:]
+[:punct:]
+ пробел (один пробел, а не[:space:]
).Как насчет
строки должны печатать выходные данные urandom в печатном формате
источник
-bash: /dev/urandom: Permission denied
Я не знаю, есть ли причина, по которой вы используете
/dev/random
пароль, но я бы порекомендовал вам использовать pwgen, чтобы облегчить вашу боль.Где 10 - длина пароля.
http://man.cx/pwgen
источник
Этот метод IMHO умнее, когда он использует данные из / dev / urandom. Строка, вставленная как $ P $ P $ P ..., должна иметь длину не менее 256 символов.
источник