【问题标题】:Generate a random password using urandom in bash script在 bash 脚本中使用 urandom 生成随机密码
【发布时间】:2020-02-26 18:38:44
【问题描述】:

我正在尝试在 linux 中创建一个 3 位随机密码,但条件如下:

  • 使用 urandom
  • 至少一个大写字母
  • 至少一个小写字母
  • 至少一个数字

【问题讨论】:

  • 这可能是起点perl -le 'print map{(a..z,A..Z,0..9)[rand 62]} 0..2'
  • 欢迎来到 Stack Overflow。 SO 是一个面向专业和爱好者程序员的问答网站。目标是您将一些自己的代码添加到您的问题中,以至少显示您为解决这个问题所做的研究工作。
  • 我打算建议pwgen -n -c 3(为什么要重新发明轮子)因为它使用/dev/urandom(根据strace)但显然你不能强迫它包含一个小写字母,只有数字和大写字母。
  • printf $'%s%s%s\n' $({ printf '%s\n' {A..Z} | shuf | head -n 1 ; printf '%s\n' {a..z} | shuf | head -n 1; printf '%s\n' {0..9} | shuf | head -n1; } | shuf ) 数字,上下随机顺序。

标签: bash random passwords


【解决方案1】:

您可以遍历随机排序的正则表达式 a-zA-Z0-9 的列表,并将正则表达式传递给 tr

for regex in $(sort -R <(printf "a-z\nA-Z\n0-9")); do
    head -c 100 /dev/urandom | tr -dc $regex | head -c 1
done

示例输出:Z7aKp40jN9bE1cA

【讨论】:

  • 此代码并不总是输出 3 个字符。当我在循环中运行它 100,000 次时,它输出 2 个字符 1880 次和 1 个字符一次。问题是 100 个字符的字符串不包含所需字符类型之一的可能性很小。对于数字尤其如此,因为在 256 个可能的字符中只有 10 个。 (几乎所有的两个字符输出都缺少一个数字。)
猜你喜欢
  • 2014-12-27
  • 1970-01-01
  • 1970-01-01
  • 2016-09-01
  • 2010-09-08
  • 1970-01-01
  • 2011-08-31
相关资源
最近更新 更多