使用Perl生成随机密码
时间:2020-02-13来源:系统城作者:电脑系统城
可以通过参数控制生成密码中包括的字符种类
- #!/usr/bin/perl
-
- use strict;
- use warnings;
- use Getopt::Std;
-
- sub show_help {
- print "Useage:\n";
- print "newp -aAnsl\n";
- print "-a\t\t the password contains lower case letters(a-z)\n";
- print "-A\t\t the password contains upper case letters(A-Z)\n";
- print "-n\t\t the password contains numerical character(0-9)\n";
- print "-s\t\t the password contains special symbols\n";
- print "-u\t\t the password contains only unique characters\n";
- print "-l length\t set the password length(default: 6)\n";
-
- exit 0;
- }
-
- sub show_version {
- print "Version: 0.2.1 Changed the default option: -l 9 -Ana. 2016-4-15\n";
-
- exit 0;
- }
-
- ### main program
-
- use vars qw($opt_a $opt_A $opt_h $opt_l $opt_n $opt_s $opt_u $opt_v);
- getopts('aAhl:nsuv');
-
- &show_version if $opt_v;
- &show_help if $opt_h;
-
- my $len = $opt_l || 9; # default length 9
- my $opt_cnt = 0;
- my @rand_str = ();
-
- # store all the characters
- my @num = qw(0 1 2 3 4 5 6 7 8 9);
- my @ABC = qw(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z);
- my @abc = qw(a b c d e f g h i j k l m n o p q r s t u v w x y z);
- # my @sym = qw(! " $ % & ' * + - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~);
- my @sym = qw(! $ % & * + - . / : ; < = > ? @ [ ] ^ _ ` { | } ~); # no " ' \
- unshift (@sym, '(', ')', '#', ','); # to prevent perl's complains or warnings.
- my @all_sym = (@num, @ABC, @abc, @sym);
- my @ch_src = ();
-
- if ((!$opt_a) && (!$opt_A) && (!$opt_n) && (!$opt_s)) {
- $opt_a++;
- $opt_A++;
- $opt_n++;
- }
-
- if ($opt_a) {
- $opt_cnt++;
- my $i = rand @abc;
- unshift @rand_str, $abc[$i];
-
- if ($opt_u) {
- if ($i>=1) {
- $abc[$i-1] = shift @abc;
- } else {
- shift @abc;
- }
- }
-
- unshift (@ch_src, @abc);
- }
-
- if ($opt_A) {
- $opt_cnt++;
- my $i = rand @ABC;
- unshift @rand_str, $ABC[$i];
-
- if ($opt_u) {
- if ($i>=1) {
- $ABC[$i-1] = shift @ABC;
- } else {
- shift @ABC;
- }
- }
-
- unshift (@ch_src, @ABC);
- }
-
- if ($opt_n) {
- $opt_cnt++;
- my $i = rand @num;
- unshift @rand_str, $num[$i];
-
- if ($opt_u) {
- if ($i>=1) {
- $num[$i-1] = shift @num;
- } else {
- shift @num;
- }
- }
-
- unshift (@ch_src, @num);
- }
-
- if ($opt_s) {
- $opt_cnt++;
- my $i = rand @sym;
- unshift @rand_str, $sym[$i];
-
- if ($opt_u) {
- if ($i>=1) {
- $sym[$i-1] = shift @sym;
- } else {
- shift @sym;
- }
- }
-
- unshift (@ch_src, @sym);
- }
-
- if ($len < $opt_cnt) {
- print "The count of characters[$len] should not be smaller " .
- "than count of character types[$opt_cnt].\n";
- exit -1;
- }
-
- if ($opt_u && $len > (@ch_src + @rand_str)) {
- print "The total number of characters[".(@ch_src + @rand_str).
- "] which could be contained " .
- "in password is smaller than the length[$len] of it.\n";
- exit -1;
- }
-
- foreach (1..$len-$opt_cnt) {
- my $i = rand @ch_src;
- unshift @rand_str, $ch_src[$i];
-
- if ($opt_u) {
- if ($i>=1) {
- $ch_src[$i-1] = shift @ch_src;
- } else {
- shift @ch_src;
- }
- }
- }
-
- foreach (1..$len) {
- my $i = rand @rand_str;
- print $rand_str[$i];
-
- if ($i>=1) {
- $rand_str[$i-1] = shift @rand_str;
- } else {
- shift @rand_str;
- }
- }
-
- print "\n";
- exit 0;
以上就是本文给大家分享的全部代码了,希望对大家学习Perl能够有所帮助
相关信息
-
-
Windows10下hyperledger fabric1.4环境搭建过程图解
目录Windows10下hyperledger fabric1.4环境搭建PrerequisitesWindows10专业版Git bashcURLGO Progamming LanguageDocker and Docker-composeInstall Samples, Binaries and Docker Imagesshared drivers执行
Window...
2020-02-13