Article 3269 of comp.lang.perl:
Xref: feenix.metronet.com comp.lang.perl:3269
Path: feenix.metronet.com!news.ecn.bgu.edu!wupost!cs.utexas.edu!sun-barr!koriel!male.EBay.Sun.COM!jethro.Corp.Sun.COM!eric.arnold@sun.com
From:
[email protected] (eric.arnold )
Newsgroups: comp.lang.perl
Subject: Re: Hiding a password?
Date: 8 Jun 1993 20:45:17 GMT
Organization: Sun Microsystems, Inc.
Lines: 59
Distribution: world
Message-ID: <
[email protected]>
References: <rstone.739557635@cunews>
Reply-To:
[email protected]
NNTP-Posting-Host: animus.corp.sun.com
I had to to put a password in a script a while ago. What I did was to
first encrypt the password, and then store the encrypted password in
the script. When the script ran, it compared the encrypted password
against the user input.
I needed two functions to accomplish this, "&genpasswd" and "&cmppasswd":
print "input passwd: ";
while ( <STDIN> )
{
if ( &cmppasswd( $passwd, $_ ) ) {
print "equal to last\n"; }
else {
print "not equal to last\n"; }
print "passwd=", $passwd = &genpasswd( $_ ), "\n";
print "input passwd: ";
}
sub cmppasswd {
local( $encrypted, $test ) = @_;
return ( $encrypted eq crypt( $test, $encrypted ) );
}
sub genpasswd {
local( $to_encrypt ) = @_;
local( $salt_string, $len, $salt );
$salt_string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.";
$len = length( $salt_string );
srand( time() );
$salt = substr( $salt_string, rand($len), 1 ) . substr( $salt_string, rand($len), 1 );
return crypt( $to_encrypt, $salt );
}
If you want to put the password "topsecret" into a readable script, you
would first get the encrypted equivalent of the desired password
string:
print &genpasswd( "topsecret" ), "\n";
and you might get:
ab8erO8W0MyYo
from here you can edit it into the script like:
$inp = <STDIN>;
if ( &cmppasswd( "ab8erO8W0MyYo", $inp ) ){
# access granted ... }
I'll leave as extra credit to have the script modify itself
with the new encrypted password.
-Eric