Linux 下使用 openssl 生成随机密码

linux 下利用 openssl 生成 12 位随机密码,只包含 0-9a-zA-Z 这些字符

openssl rand -base64 12 |tr -dc '0-9a-zA-Z' |head -c 12

友情提醒:如果需要特殊字符,建议随便在任意位置插入一个或若干个,比如 _-.?>< 等等字符

当然了,也可以使用 /dev/urandom,下面是个例子

$ LC_ALL=C tr -dc 'A-Za-z0-9!@#$%^&*()' </dev/urandom | head -c 12
fHb!uaM8YFYw

来自你的消息:

在 linux 下使用 openssl 生成随机密码,请写出几个例子

来自 ChatGPT 的消息:

当在 Linux 下使用 OpenSSL 生成随机密码时,可以使用以下命令和选项:

  1. 生成一个包含字母、数字和特殊字符的随机密码:

    openssl rand -base64 12

    这将生成一个长度为 12 的随机密码,包含大小写字母、数字和特殊字符。

  2. 生成一个只包含数字的随机密码:

    openssl rand -base64 8 | tr -dc '0-9'

    这将生成一个长度为 8 的随机密码,只包含数字。

  3. 生成一个只包含字母的随机密码:

    openssl rand -base64 10 | tr -dc 'a-zA-Z'

    这将生成一个长度为 10 的随机密码,只包含字母(大小写)。

  4. 生成一个指定长度的随机密码,并将结果保存到文件中:

    openssl rand -base64 16 -out password.txt

    这将生成一个长度为 16 的随机密码,并将结果保存到名为 "password.txt" 的文件中。

请根据需要选择适合的命令和选项,生成符合您要求的随机密码。

来自你的消息:

我执行了 openssl rand -base64 12 生成的结果是 1lWwKRocbOmXl3Zt 这个不是 16 位么,怎么是 12 位

来自 ChatGPT 的消息:

非常抱歉,我之前的回答有误。openssl rand -base64 12 命令生成的结果确实是 12 个字符,而不是 16 个字符。我混淆了字符数和字节数。

在使用 openssl rand -base64 命令时,每个字符由 6 位二进制表示。由于 Base64 编码使用 4 个字符来表示 3 个字节,所以 12 个字符实际上是 9 个字节。

如果您需要生成 16 个字符的随机密码,您可以执行 openssl rand -base64 16 | head -c 16 命令。这将生成 16 个字符的随机密码,并将结果截断为所需的长度。

非常抱歉给您带来了困惑,希望这次的回答能够解决您的问题。

来自你的消息:

openssl rand -base64 生成的字符串可能会包含 = 符号,我只想要数字和大小写字母,应该如何控制?

来自 ChatGPT 的消息:

如果您只想要生成包含数字和大小写字母的随机密码,并且不包含特殊字符或等号(=),您可以使用以下命令:

openssl rand -hex 12 | tr -dc 'a-zA-Z0-9' | head -c 12

这个命令会生成 12 个字符的随机密码,只包含数字和大小写字母,并且不包含特殊字符。openssl rand -hex 12 生成的是 12 个字节的随机数据,然后通过 tr -dc 'a-zA-Z0-9' 过滤掉除了数字和大小写字母之外的字符,最后使用 head -c 12 截取前 12 个字符作为最终的随机密码。

请注意,由于只包含数字和大小写字母,这种密码的强度可能较弱。如果您需要更强的密码,可以增加密码的长度或者包含其他字符。

来自你的消息:

openssl rand 有哪些用法?

来自 ChatGPT 的消息:

openssl rand 是一个 OpenSSL 工具,用于生成随机数据。它可以用于多种用途,例如生成随机密码、密钥或初始化向量等。以下是一些常见的 openssl rand 命令用法:

  1. 生成指定长度的随机字节:

    openssl rand -out random.bin 32

    这将生成一个包含 32 个随机字节的文件 random.bin

  2. 生成指定长度的随机十六进制数:

    openssl rand -hex 16

    这将生成一个包含 16 个随机十六进制字符的字符串。

  3. 生成指定长度的随机 Base64 编码字符串:

    openssl rand -base64 24

    这将生成一个包含 24 个随机 Base64 字符的字符串。

这些只是 openssl rand 命令的一些常见用法示例。你可以通过运行 openssl rand --help 查看完整的命令选项和用法说明。

来自你的消息:

openssl rand -hex 12 | tr -dc 'a-zA-Z0-9' | head -c 12 这个命令里, tr -dc 是什么功能,解释一下

来自 ChatGPT 的消息:

在给定的命令 openssl rand -hex 12 | tr -dc 'a-zA-Z0-9' | head -c 12 中,tr -dc 'a-zA-Z0-9' 是一个用于字符转换和删除的 Linux 命令。

具体来说,tr 命令用于字符转换或删除。在这个命令中,-dc 选项结合使用,具有以下含义:

  • -d 选项表示删除指定字符集之外的字符。
  • -c 选项表示使用指定字符集的补集。

字符集 'a-zA-Z0-9' 包含小写字母 a-z、大写字母 A-Z 和数字 0-9。因此,tr -dc 'a-zA-Z0-9' 的作用是删除输入中除了这些字符之外的所有字符。

在这个命令中,openssl rand -hex 12 生成了一个包含 12 个随机十六进制字符的字符串,然后将其传递给 tr -dc 'a-zA-Z0-9',用于删除除字母和数字之外的所有字符。最后,head -c 12 从结果中提取前 12 个字符。

因此,整个命令的目的是生成一个包含 12 个随机字母和数字的字符串。

来自你的消息:

openssl rand -base64 12 |tr -dc '0-9a-zA-Z' |head -c 12 我执行了这个命令,如何让结果自动换行?

来自 ChatGPT 的消息:

如果你想让结果自动换行,可以在 head 命令中使用 -c 选项来指定每行的字符数。例如,你可以将 -c 12 更改为 -c 4,这样结果将每行显示 4 个字符,然后自动换行。

以下是修改后的命令示例:

openssl rand -base64 12 | tr -dc '0-9a-zA-Z' | head -c 12 | fold -w 4

在这个命令中,fold -w 4 将结果分成每行 4 个字符的块,并自动换行显示。

请注意,根据你的终端设置,自动换行可能会受到限制,因此结果可能不会按照你期望的方式显示。

添加新评论