在 Solaris 上生成带有特殊字符的随机密码

在 Solaris 上生成带有特殊字符的随机密码

我正在尝试在 Solaris 服务器中生成 10 个字符的随机密码。网络上给出的示例适用于 Linux,大部分不适用于 Solaris。

答案1

您可以从 获取加密质量的随机字节/dev/urandom。 (它从 Solaris 9 开始就存在。Linux 上也存在。)这包括不可打印的字符,因此您需要删除这些字符。以下命令提取 10 个随机可打印、非空格 ASCII 字符。

</dev/urandom tr -dc '!-~' | dd ibs=1 obs=1 count=10

我不建议在密码中使用特殊字符。它们不会使密码更安全。密码的安全性在于它的熵。 10 个字符的密码具有 10×log 2 (94) ≈ 65.5 位熵。您可以从 9 个任意字节中获得相同数量的熵,并根据需要对它们进行编码,例如十六进制。

</dev/urandom dd ibs=1 obs=1 count=9 | od -tx1 -An | tr -d ' '

或者作为更短的 Base64。

</dev/urandom dd ibs=1 obs=1 count=9 | uuencode -m - | sed -n 2p

如果有一些硬性约束“密码必须包含至少一个特殊字符”(这是一种有问题的密码制作方式)由普通人选择更安全,并且对于随机生成的密码来说是完全错误的),那么您不能简单地使用随机密码,因为它有可能不包含所需类中的任何字符。如果您拒绝不符合限制的密码,您将减少密码的安全性。相反,使密码更长,例如

</dev/urandom dd ibs=1 obs=1 count=9 | uuencode -m - | sed '2!d; s/$/-Aa1/'

如果您需要记住密码,那就是另一个问题了。最容易记住的密码是密码短语

答案2

你在 Solaris 中有 perl,它有帮助:

perl -e 'print[0..9,a..z,A..Z]->[rand 62]for 1..10'

对于特殊字符,它将是:

perl -e 'print [0..9,a..z,A..Z,qw{- _ / & ?}]->[rand 67]for 0..10'

相关内容