我想生成一个随机字符串(例如密码、用户名等)。应该可以指定所需的长度(例如 13 个字符)。
我可以使用哪些工具?
(出于安全和隐私原因,最好是离线生成字符串,而不是在网站上在线生成。)
答案1
我最喜欢的方法是使用/dev/urandom
和tr
来删除不需要的字符。例如,仅获取数字和字母:
tr -dc A-Za-z0-9 </dev/urandom | head -c 13; echo
或者,到包括更多角色来自OWASP 密码特殊字符列表:
tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 13; echo
tr
如果您在抱怨输入方面遇到一些问题,尝试添加LC_ALL=C
像这样:
LC_ALL=C tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 13; echo
tr
还有一个更具可读性的图形字符字符类。将其限制为C
区域设置应该会产生与上述显式字符列表相同类型的输出:
LC_ALL=C tr -dc '[:graph:]' </dev/urandom | head -c 13; echo
答案2
我正在使用openssl
命令,密码学的瑞士军刀。
openssl rand -base64 12
或者
openssl rand -hex 12
答案3
要生成随机密码,您可以使用pwgen
:
pwgen
生成随机、无意义但可发音的密码。这些密码要么仅包含小写字母,要么包含大小写混合,或者包含数字。大写字母和数字的放置方式可以在仅记住单词时轻松记住它们的位置。
生成7个长度为13的密码:
geek@liv-inspiron:~$ pwgen 13 7
Eu7Teadiphaec giepahl3Oyaiy iecoo9Aetaib4 phaiChae6Eivi athoo3igee8Co
Iphu4ufeDeelo aesoYi2lie9he
正如评论中提到的,您可以通过使用参数来避免减少熵-s
(即生成更安全、完全随机但难以记住的密码):
geek@liv-inspiron:~$ pwgen -s 13 7
eAfycrPlM4cYv 4MRXmZmyIVNBp D8y71iqjG7Zq7 FQRHcserl4R8O yRCUtPtV3dsqV
0vJpp2h0OrgF1 QTp7MKtJyTrjz
对于brew
用户,请参阅这里。
要生成随机用户名,您可以使用gpw
:
该软件包生成可发音的密码。它使用从您输入的任何字典中获取的三字母组合(三字母)的统计数据。
生成7个长度为13的密码(用户名):
geek@liv-inspiron:~$ gpw 7 13
sreepoidahsas
risadiestinge
ntodynesssine
deodstestress
natinglumperm
riasigentspir
enderiferback
答案4
这是如何做的,我就是这么做的。它生成 10 个字符的随机字符串。您可以通过用其他字符串处理工具替换“fold”来优化它。
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1