linux 下利用 openssl 生成 12 位随机密码,只包含 0-9
,a-z
,A-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 生成随机密码时,可以使用以下命令和选项:
生成一个包含字母、数字和特殊字符的随机密码:
openssl rand -base64 12
这将生成一个长度为 12 的随机密码,包含大小写字母、数字和特殊字符。
生成一个只包含数字的随机密码:
openssl rand -base64 8 | tr -dc '0-9'
这将生成一个长度为 8 的随机密码,只包含数字。
生成一个只包含字母的随机密码:
openssl rand -base64 10 | tr -dc 'a-zA-Z'
这将生成一个长度为 10 的随机密码,只包含字母(大小写)。
生成一个指定长度的随机密码,并将结果保存到文件中:
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
命令用法:
生成指定长度的随机字节:
openssl rand -out random.bin 32
这将生成一个包含 32 个随机字节的文件
random.bin
。生成指定长度的随机十六进制数:
openssl rand -hex 16
这将生成一个包含 16 个随机十六进制字符的字符串。
生成指定长度的随机 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 个字符的块,并自动换行显示。
请注意,根据你的终端设置,自动换行可能会受到限制,因此结果可能不会按照你期望的方式显示。