我在命令行中使用 openssl rand 来生成密码。我用它openssl rand -base64 10
来生成密码。但我需要排除大写字母?例如,如何生成 10 个随机符号,不包括大写字母?谢谢
答案1
没有直接的方法可以做到这一点,但您可以创建一个更长的“正常”字符串,然后通过以下方式对其进行处理sed
:
假设你使用 16 个字符,那么openssl rand -base64 48 | sed 's/[A-Z]//g ; s/^\(.\{16\}\).*/\1/'
答案2
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
解释+-.
为范围;,
在该范围内。我的意思是+-._
字面意思,不包括,
。