系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 脚本中心 > per > 详细页面

使用Perl生成随机密码

时间:2020-02-13来源:系统城作者:电脑系统城

可以通过参数控制生成密码中包括的字符种类


 
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5. use Getopt::Std;
  6.  
  7. sub show_help {
  8. print "Useage:\n";
  9. print "newp -aAnsl\n";
  10. print "-a\t\t the password contains lower case letters(a-z)\n";
  11. print "-A\t\t the password contains upper case letters(A-Z)\n";
  12. print "-n\t\t the password contains numerical character(0-9)\n";
  13. print "-s\t\t the password contains special symbols\n";
  14. print "-u\t\t the password contains only unique characters\n";
  15. print "-l length\t set the password length(default: 6)\n";
  16.  
  17. exit 0;
  18. }
  19.  
  20. sub show_version {
  21. print "Version: 0.2.1 Changed the default option: -l 9 -Ana. 2016-4-15\n";
  22.  
  23. exit 0;
  24. }
  25.  
  26. ### main program
  27.  
  28. use vars qw($opt_a $opt_A $opt_h $opt_l $opt_n $opt_s $opt_u $opt_v);
  29. getopts('aAhl:nsuv');
  30.  
  31. &show_version if $opt_v;
  32. &show_help if $opt_h;
  33.  
  34. my $len = $opt_l || 9; # default length 9
  35. my $opt_cnt = 0;
  36. my @rand_str = ();
  37.  
  38. # store all the characters
  39. my @num = qw(0 1 2 3 4 5 6 7 8 9);
  40. 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);
  41. 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);
  42. # my @sym = qw(! " $ % & ' * + - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~);
  43. my @sym = qw(! $ % & * + - . / : ; < = > ? @ [ ] ^ _ ` { | } ~); # no " ' \
  44. unshift (@sym, '(', ')', '#', ','); # to prevent perl's complains or warnings.
  45. my @all_sym = (@num, @ABC, @abc, @sym);
  46. my @ch_src = ();
  47.  
  48. if ((!$opt_a) && (!$opt_A) && (!$opt_n) && (!$opt_s)) {
  49. $opt_a++;
  50. $opt_A++;
  51. $opt_n++;
  52. }
  53.  
  54. if ($opt_a) {
  55. $opt_cnt++;
  56. my $i = rand @abc;
  57. unshift @rand_str, $abc[$i];
  58.  
  59. if ($opt_u) {
  60. if ($i>=1) {
  61. $abc[$i-1] = shift @abc;
  62. } else {
  63. shift @abc;
  64. }
  65. }
  66.  
  67. unshift (@ch_src, @abc);
  68. }
  69.  
  70. if ($opt_A) {
  71. $opt_cnt++;
  72. my $i = rand @ABC;
  73. unshift @rand_str, $ABC[$i];
  74.  
  75. if ($opt_u) {
  76. if ($i>=1) {
  77. $ABC[$i-1] = shift @ABC;
  78. } else {
  79. shift @ABC;
  80. }
  81. }
  82.  
  83. unshift (@ch_src, @ABC);
  84. }
  85.  
  86. if ($opt_n) {
  87. $opt_cnt++;
  88. my $i = rand @num;
  89. unshift @rand_str, $num[$i];
  90.  
  91. if ($opt_u) {
  92. if ($i>=1) {
  93. $num[$i-1] = shift @num;
  94. } else {
  95. shift @num;
  96. }
  97. }
  98.  
  99. unshift (@ch_src, @num);
  100. }
  101.  
  102. if ($opt_s) {
  103. $opt_cnt++;
  104. my $i = rand @sym;
  105. unshift @rand_str, $sym[$i];
  106.  
  107. if ($opt_u) {
  108. if ($i>=1) {
  109. $sym[$i-1] = shift @sym;
  110. } else {
  111. shift @sym;
  112. }
  113. }
  114.  
  115. unshift (@ch_src, @sym);
  116. }
  117.  
  118. if ($len < $opt_cnt) {
  119. print "The count of characters[$len] should not be smaller " .
  120. "than count of character types[$opt_cnt].\n";
  121. exit -1;
  122. }
  123.  
  124. if ($opt_u && $len > (@ch_src + @rand_str)) {
  125. print "The total number of characters[".(@ch_src + @rand_str).
  126. "] which could be contained " .
  127. "in password is smaller than the length[$len] of it.\n";
  128. exit -1;
  129. }
  130.  
  131. foreach (1..$len-$opt_cnt) {
  132. my $i = rand @ch_src;
  133. unshift @rand_str, $ch_src[$i];
  134.  
  135. if ($opt_u) {
  136. if ($i>=1) {
  137. $ch_src[$i-1] = shift @ch_src;
  138. } else {
  139. shift @ch_src;
  140. }
  141. }
  142. }
  143.  
  144. foreach (1..$len) {
  145. my $i = rand @rand_str;
  146. print $rand_str[$i];
  147.  
  148. if ($i>=1) {
  149. $rand_str[$i-1] = shift @rand_str;
  150. } else {
  151. shift @rand_str;
  152. }
  153. }
  154.  
  155. print "\n";
  156. exit 0;

以上就是本文给大家分享的全部代码了,希望对大家学习Perl能够有所帮助

分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载