Password Hashing Program
#!/usr/bin/perl -w
#####################################################################################
# This program is not guaranteed to work at all, and by using this program you #
# release the author of any an all liability. #
# You may use this program so long as this notice and disclaimer remain intact. #
# #
# This program will create a hash (SHA1, MD5, etc) of a plain text password string. #
# #
# Written by Bret Jordan #
# bret.jordan@utah.edu #
# http://utahgeeks.sourceforge.net #
# #
#####################################################################################
my $sVersion = "0.01";
use strict;
use Digest::MD5;
use Digest::SHA1;
use Term::ReadKey;
use Getopt::Long;
# ---------------------------------------------------------
# Process Command Line Options
# ---------------------------------------------------------
my %options = &get_options();
&print_syntax if (defined $options{h} || defined $options{help});
my $sClearPassword;
if ($options{p})
{
$sClearPassword = $options{p};
}
else
{
$sClearPassword = &get_pwd();
}
# ---------------------------------------------------------
# Create Encrypted Password
# ---------------------------------------------------------
my $ctx;
if (lc($options{d}) eq "md5") {
$ctx = Digest::MD5->new;
}
elsif (lc($options{d}) eq "sha1") {
$ctx = Digest::SHA1->new;
}
$ctx->add($sClearPassword);
if (lc($options{e}) eq "bin") {
print $ctx->digest;
}
elsif (lc($options{e}) eq "hex") {
print $ctx->hexdigest;
}
elsif (lc($options{e}) eq "b64") {
print $ctx->b64digest;
}
# ---------------------------------------------------------
# Subroutines
# ---------------------------------------------------------
sub get_pwd {
my ($sPassword, $sPasswordVerify);
do
{
print "Password: ";
ReadMode('noecho');
chomp ($sPassword = ReadLine(0));
print "\n";
ReadMode('normal');
print "Verify Password: ";
ReadMode('noecho');
chomp ($sPasswordVerify = ReadLine(0));
print "\n";
ReadMode('normal');
print "Passwords do not match!\n" if ($sPassword ne $sPasswordVerify);
}
while ($sPassword ne $sPasswordVerify);
return $sPassword;
}
sub get_options {
my %flags;
if (@ARGV > 0)
{
# allow flags denoted by "-" or "--"
Getopt::Long::Configure("prefix_pattern=(--|-)");
GetOptions (\%flags, qw(d=s e=s p=s h|? help));
}
# Set defaults to SHA1 and Base64
if (!defined $flags{d}) {$flags{d} = "sha1";}
if (!defined $flags{e}) {$flags{e} = "b64";}
return %flags;
}
sub print_syntax {
my ($sScript) = ($0 =~ /([^\\\/]*?)$/ );
print <<EOT;
Create encrypted password.
Version: $sVersion
Syntax:
perl $sScript [-d Digest] [-e EncodingType] [-p FileName] [-h]
-d Digest (md5 or sha1), sha1 is the default.
-e Encoding (bin=Binary, hex=Hex, b64=Base64) b64 is the default.
-p Password.
-h This help menu.
EOT
exit();
}