在 Perl 中生成有效的 Unix 用户名和密码
Posted
技术标签:
【中文标题】在 Perl 中生成有效的 Unix 用户名和密码【英文标题】:Generate valid Unix username and password in Perl 【发布时间】:2013-05-17 00:00:40 【问题描述】:为了在 Unix 系统上创建用户,我需要生成一个用户名和密码对,最好是一对难以猜测的(为了安全)。有谁知道使用 Perl 有什么好的方法吗?
更新
所以我把下面的一些答案结合起来,做了一些我自己的东西,这就是我最终得到的。现在这些生成的用户名和密码有点神秘,不容易记住,这正是我想要的。但是,如果您正在寻找更具可读性的生成,则必须根据自己的喜好对其进行调整。
use String::Random qw(random_regex);
use Data::Random::WordList;
my $user = random_regex('\w3,6\d3,6\w3,7') . time . int(rand(1000));
my $wl = new Data::Random::WordList( wordlist => '/usr/share/dict/words' );
my @rand_words = $wl->get_words(int(rand(3)) + 3);
$wl->close();
my $pass = join " ", @rand_words;
$pass .= ' ' . int(rand(1000)) . time;
my $crypt_pass = crypt($pass,'salt');
system "useradd -p $crypt_pass $user";
#you can now login with $user and $pass on your system
【问题讨论】:
查看***.com/questions/6949667/… 的答案以了解限制,然后您应该能够使用随机数生成器生成所需的内容。抱歉,我的 Perl 有点生疏,但我可以尝试创建一个示例。 @Intermernet,谢谢!那个链接真的很有用。幸运的是我在 CentOS 6 上 :) 【参考方案1】:用于生成密码您可以使用:
$password = `date | md5sum | fold -w 10 | head -n 1`;
$password = crypt($password,'some_string');
它实际上比 Perl 更像 Bash,但它可以胜任。
【讨论】:
但是crypt
函数应该使用什么盐? useradd
命令可以使用任何盐吗?
@srchulo 由crypt
生成的任何密码都可以与useradd
一起使用。根据文档,您应该使用匹配的字符串: [a-zA-Z0-9./] for salt【参考方案2】:
来自http://sysadminsjourney.com/content/2009/09/16/random-password-generation-perl-one-liner/
perl -le 'print map (a..z,A..Z,0..9)[rand 62] 0..pop' 8
将从字符 a-z、A-Z 和 0-9 生成一个随机的 8 个字符的字符串。
您应该能够修改它以生成用户名和密码。
用户名是:
perl -le 'print map ([a-z_][a-z0-9_][rand 62] 0..pop' 30
密码类似,但您需要使用passwd
命令将其实际设置给用户。不确定 Perl 是否有等价物。
【讨论】:
【参考方案3】:正如其他人所提到的,它比 perl 更 BASH。这是我生成密码的方式:
passwd=`date +%s | sha256sum | base64 | head -1 | cut -c 1-8`
【讨论】:
以上是关于在 Perl 中生成有效的 Unix 用户名和密码的主要内容,如果未能解决你的问题,请参考以下文章
JAVA WEB项目中生成验证码及验证实例(附源码及目录结构)
如何在 android KeyStore 中生成 KeyPair,受自定义密码保护