Openssl rand base64(大写字母除外)。命令行。如何操作?

Openssl rand base64(大写字母除外)。命令行。如何操作?

我在命令行中使用 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解释+-.为范围;,在该范围内。我的意思是+-._字面意思,不包括,

相关内容