有时我需要在 Unix 命令行工作时生成密码。我的 zshrc 中有以下别名:
alias randpass='openssl rand -base64 32 | tr -d /=+ | cut -c -30'
这些命令通过执行以下操作生成由 30 个字母数字字符组成的字符串:
- 使用 OpenSSL 生成 32 字节的随机数据。
- Base64 编码结果。
- 删除除大写字母、小写字母和数字之外的所有字符。
- 将结果截断为 30 个字符。
我能看到的唯一缺陷是删除/
、=
和+
. 当然,这需要这三个符号占 base64 编码字符的三分之一以上,这是非常不可能的。
“openssl rand”的输出是否足够随机以用作密码的基础?base64 编码随机字节是否会引入任何偏差?(我假设删除/
、=
和+
引入了偏差,但这非常小。)