请选择 进入手机版 | 继续访问电脑版

使用Perl生成随机密码

[复制链接]
查看319 | 回复0 | 2020-7-16 07:51:49 | 显示全部楼层 |阅读模式
可以通过参数控制生成密码中包括的字符种类
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Getopt::Std;
  5. sub show_help {
  6.   print "Useage:\n";
  7.   print "newp -aAnsl\n";
  8.   print "-a\t\t the password contains lower case letters(a-z)\n";
  9.   print "-A\t\t the password contains upper case letters(A-Z)\n";
  10.   print "-n\t\t the password contains numerical character(0-9)\n";
  11.   print "-s\t\t the password contains special symbols\n";
  12.   print "-u\t\t the password contains only unique characters\n";
  13.   print "-l length\t set the password length(default: 6)\n";
  14.   exit 0;
  15. }
  16. sub show_version {
  17.   print "Version: 0.2.1 Changed the default option: -l 9 -Ana. 2016-4-15\n";
  18.   exit 0;
  19. }
  20. ### main program
  21. use vars qw($opt_a $opt_A $opt_h $opt_l $opt_n $opt_s $opt_u $opt_v);
  22. getopts('aAhl:nsuv');
  23. &show_version if $opt_v;
  24. &show_help if $opt_h;
  25. my $len = $opt_l || 9;  # default length 9
  26. my $opt_cnt = 0;
  27. my @rand_str = ();
  28. # store all the characters
  29. my @num = qw(0 1 2 3 4 5 6 7 8 9);
  30. 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);
  31. 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);
  32. # my @sym = qw(! " $ % & ' * + - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~);
  33. my @sym = qw(! $ % & * + - . / : ; < = > ? @ [ ] ^ _ ` { | } ~); # no " ' \
  34. unshift (@sym, '(', ')', '#', ','); # to prevent perl's complains or warnings.
  35. my @all_sym = (@num, @ABC, @abc, @sym);
  36. my @ch_src = ();
  37. if ((!$opt_a) && (!$opt_A) && (!$opt_n) && (!$opt_s)) {
  38.   $opt_a++;
  39.   $opt_A++;
  40.   $opt_n++;
  41. }
  42. if ($opt_a) {
  43.   $opt_cnt++;
  44.   my $i = rand @abc;
  45.   unshift @rand_str, $abc[$i];
  46.   if ($opt_u) {
  47.     if ($i>=1) {
  48.       $abc[$i-1] = shift @abc;
  49.     } else {
  50.       shift @abc;
  51.     }
  52.   }
  53.   unshift (@ch_src, @abc);
  54. }
  55. if ($opt_A) {
  56.   $opt_cnt++;
  57.   my $i = rand @ABC;
  58.   unshift @rand_str, $ABC[$i];
  59.   if ($opt_u) {
  60.     if ($i>=1) {
  61.       $ABC[$i-1] = shift @ABC;
  62.     } else {
  63.       shift @ABC;
  64.     }
  65.   }
  66.   unshift (@ch_src, @ABC);
  67. }
  68. if ($opt_n) {
  69.   $opt_cnt++;
  70.   my $i = rand @num;
  71.   unshift @rand_str, $num[$i];
  72.   if ($opt_u) {
  73.     if ($i>=1) {
  74.       $num[$i-1] = shift @num;
  75.     } else {
  76.       shift @num;
  77.     }
  78.   }
  79.   unshift (@ch_src, @num);
  80. }
  81. if ($opt_s) {
  82.   $opt_cnt++;
  83.   my $i = rand @sym;
  84.   unshift @rand_str, $sym[$i];
  85.   if ($opt_u) {
  86.     if ($i>=1) {
  87.       $sym[$i-1] = shift @sym;
  88.     } else {
  89.       shift @sym;
  90.     }
  91.   }
  92.   unshift (@ch_src, @sym);
  93. }
  94. if ($len < $opt_cnt) {
  95.   print "The count of characters[$len] should not be smaller " .
  96.      "than count of character types[$opt_cnt].\n";
  97.   exit -1;
  98. }
  99. if ($opt_u && $len > (@ch_src + @rand_str)) {
  100.   print "The total number of characters[".(@ch_src + @rand_str).
  101.      "] which could be contained " .
  102.      "in password is smaller than the length[$len] of it.\n";
  103.   exit -1;
  104. }
  105. foreach (1..$len-$opt_cnt) {
  106.   my $i = rand @ch_src;
  107.   unshift @rand_str, $ch_src[$i];
  108.   if ($opt_u) {
  109.     if ($i>=1) {
  110.       $ch_src[$i-1] = shift @ch_src;
  111.     } else {
  112.       shift @ch_src;
  113.     }
  114.   }
  115. }
  116. foreach (1..$len) {
  117.   my $i = rand @rand_str;
  118.   print $rand_str[$i];
  119.   if ($i>=1) {
  120.     $rand_str[$i-1] = shift @rand_str;
  121.   } else {
  122.     shift @rand_str;
  123.   }
  124. }
  125. print "\n";
  126. exit 0;
复制代码
以上就是本文给大家分享的全部代码了,希望对大家学习Perl能够有所帮助

买目录提供泛目录、二级目录、租目录、出租网站建设资源、编程学习类,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则