Я использую openssl rand в командной строке для генерации пароля. Я использую openssl rand -base64 10 для генерации пароля. Но мне нужно исключить заглавные буквы? Например, как генерировать 10 случайных символов, исключая заглавные буквы? Спасибо

2 ответа2

1

Нет прямого способа сделать это, но вы можете создать гораздо более длинную "нормальную" строку и затем помассировать ее с помощью sed:

Предполагая, что вы используете 16 символов, просто выполните openssl rand -base64 48 | sed 's/[A-Z]//g ; s/^\(.\{16\}\).*/\1/'

0

openssl rand -base64 10 генерирует более 10 символов. Он генерирует 10 байтов (которые могут соответствовать непечатаемым символам) и кодирует их (используя набор печатных символов).

Для генерации случайных символов из заданного набора используйте tr . Пример:

LC_ALL=C </dev/urandom tr -cd '[:lower:][:digit:]+\-._' | head -c 10 ; printf '\n'

Здесь tr получает байты из /dev/urandom и передает только совпадающие; head завершает трубу, когда достигается указанное количество символов; printf добавляет новую строку.

Проверьте man 1 tr и постройте свой собственный желаемый набор.

Заметки:

  • LC_ALL=C заставляет tr игнорировать вашу локаль.
  • Я избежал - (следовательно, \-), потому что tr интерпретирует +-. как диапазон; , Находится внутри этого диапазона. Я имел в виду буквально +-._ , не включая , .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .