#!/usr/bin/perl -w # # Simple password generator. # # Copyright (c) 2006 Marcus Libäck <marcus@terminal.se> # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # use strict; use Getopt::Std; my $version = "1.0-20050913"; my %opts; my $num = 1; my $pwlen = 10; my $special = 1; getopts('l:n:sh', \%opts); # Help. if (exists $opts{'h'}) { help(); } # Special characters... unless (exists $opts{'s'}) { undef $special; } # Number of passwords to generate. if (exists $opts{'n'}) { if ($opts{'n'} =~ m/^[0-9]*$/) { $num = $opts{'n'}; } else { die "Invalid number of passwords to generate $opts{'n'}"; } } # Password length. if (exists $opts{'l'}) { if ($opts{'l'} =~ m/^[0-9]*$/) { $pwlen = $opts{'l'}; } else { die "Invalid password length $opts{'l'}"; } } for (my $i=0;$i<$num;++$i) { print pwgen($pwlen),"\n"; } #print "Password(s) generated.\n"; # Password generation routine. sub pwgen { my $pwlen = shift; my $password; my $_rand; my @chars = split (" ","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 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 0 1 2 3 4 5 6 7 8 9 - _ # % & / ( ) = ? + * ! @"); srand; for (my $i=0;$i<$pwlen;++$i) { if (defined $special) { $_rand = int(rand 76); } else { $_rand = int(rand 62); } $password .= $chars[$_rand]; } return $password; } # Help. sub help { print "Version $version Usage: $0 [options] Options: -h display this text. -l password length, defaults to 10. -n number of passwords to generate, defaults to 1. -s includes special characters.\n"; exit; }