方法1:基础随机密码生成器
#!/usr/bin/perl
use strict;
use warnings;
sub generate_password {
my ($length) = @_;
$length ||= 12; # 默认长度12
my @chars = (
'A'..'Z', # 大写字母
'a'..'z', # 小写字母
'0'..'9', # 数字
qw(! @ # $ % ^ & * ( ) _ + - = { } [ ] | : ; " ' < > , . ? /) # 特殊字符
);
my $password = '';
for (1..$length) {
$password .= $chars[rand @chars];
}
return $password;
}
# 使用示例
print "随机密码: " . generate_password(16) . "\n";
方法2:更灵活的密码生成器
#!/usr/bin/perl
use strict;
use warnings;
sub generate_flexible_password {
my %params = @_;
my $length = $params{length} || 12;
my $use_upper = exists $params{upper} ? $params{upper} : 1;
my $use_lower = exists $params{lower} ? $params{lower} : 1;
my $use_digits = exists $params{digits} ? $params{digits} : 1;
my $use_special = exists $params{special} ? $params{special} : 1;
my @chars;
if ($use_upper) {
push @chars, 'A'..'Z';
}
if ($use_lower) {
push @chars, 'a'..'z';
}
if ($use_digits) {
push @chars, '0'..'9';
}
if ($use_special) {
push @chars, qw(! @ # $ % ^ & * ( ) _ + - = { } [ ] | : ; " ' < > , . ? /);
}
die "必须至少选择一种字符类型!\n" unless @chars;
my $password = '';
for (1..$length) {
$password .= $chars[rand @chars];
}
return $password;
}
# 使用示例
print "标准密码: " . generate_flexible_password(length => 12) . "\n";
print "仅数字密码: " . generate_flexible_password(length => 8, upper => 0, lower => 0, special => 0) . "\n";
print "无特殊字符: " . generate_flexible_password(length => 10, special => 0) . "\n";
方法3:使用 Perl 模块
#!/usr/bin/perl
use strict;
use warnings;
use Crypt::Random qw(make_seed);
use Data::Entropy::Algorithms qw(rand_int);
sub generate_secure_password {
my ($length) = @_;
$length ||= 16;
# 更好的随机种子
srand(make_seed());
my @chars = (
'A'..'Z', 'a'..'z', '0'..'9',
qw(! @ # $ % ^ & * ( ) _ + - = { } [ ] | : ; " ' < > , . ? /)
);
my $password = '';
for (1..$length) {
$password .= $chars[rand_int(scalar @chars)];
}
return $password;
}
# 使用示例
print "安全随机密码: " . generate_secure_password(20) . "\n";
方法4:命令行工具
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
my $length = 12;
my $count = 1;
my $no_special = 0;
my $only_digits = 0;
my $help = 0;
GetOptions(
'length=i' => \$length,
'count=i' => \$count,
'no-special' => \$no_special,
'only-digits' => \$only_digits,
'help' => \$help,
);
if ($help) {
print <<"HELP";
用法: $0 [选项]
选项:
--length N 密码长度 (默认: 12)
--count N 生成数量 (默认: 1)
--no-special 不使用特殊字符
--only-digits 只使用数字
--help 显示此帮助
HELP
exit;
}
my @chars;
if ($only_digits) {
@chars = ('0'..'9');
} else {
@chars = ('A'..'Z', 'a'..'z', '0'..'9');
push @chars, qw(! @ # $ % ^ & * ( ) _ + - = { } [ ] | : ; " ' < > , . ? /) unless $no_special;
}
for (1..$count) {
my $password = '';
for (1..$length) {
$password .= $chars[rand @chars];
}
print "$password\n";
}
使用方法
保存脚本:
# 将代码保存为 password_generator.pl
chmod +x password_generator.pl
运行脚本:
# 生成默认密码
perl password_generator.pl
生成指定长度的密码
perl password_generator.pl --length 16 --count 5
生成不含特殊字符的密码
perl password_generator.pl --no-special --length 10
## 安全建议
1. **密码长度**:建议至少12个字符
2. **字符复杂度**:包含大小写字母、数字和特殊字符
3. **随机性**:确保使用良好的随机源
4. **存储安全**:不要将密码保存在明文中
5. **定期更换**:重要密码建议定期更换
这些方法可以根据你的具体需求进行调整。如果你需要更强的安全性,建议使用方法3,它使用了专业的随机数生成模块。