Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Create encrypted passwords

by Kozz (Friar)
on Mar 25, 2000 at 04:05 UTC ( #6136=perlcraft: print w/ replies, xml ) Need Help??

   1: Good for creating passwords for .htpasswd files or for any other *nix password file:
   3: <CODE>
   4: sub mkpasswd{
   5:   my($plaintextpass)=@_;
   6:   my($salt1, $salt, $encrypted);
   8:   $salt1 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./'; 
   9:   $salt = substr($salt1,rand(length($salt1)),1);
  10:   $salt .= substr($salt1,rand(length($salt1)),1);
  11:   $encrypted = crypt($plaintextpass, $salt);
  13:   return $encrypted;
  14: }
  15: </CODE>

Comment on Create encrypted passwords
Download Code
Replies are listed 'Best First'.
RE: Create encrypted passwords
by Anonymous Monk on Mar 27, 2000 at 13:52 UTC
    Line 9 assigns a character to $salt, so when $salt is used in line 10, it will pick a random character from the 1 character $salt, which means $salt will always be two repeated characters.
RE: Create encrypted passwords
by IndyZ (Friar) on Apr 19, 2000 at 06:46 UTC
    From a crypto point of view, it is <BLINK>very</BLINK> important to remember that on many systems, the rand function may not be truly random.
    You have been warned.

RE: Create encrypted passwords
by Anonymous Monk on Mar 28, 2000 at 08:08 UTC
    Better so: @chars=(a..z,A..Z,0..9,'.','/'); $salt=$charsrand(64).$charsrand(64); Zak

      Better still:

      $salt = join '', ('a'..'z','A'..'Z',0..9,'.','/')[rand 64, rand 64] ;


      Update: Ok, took me a year to come back and fix this, but it's fixed the way I'd do it today. =/

        That doesn't work. You're taking an array slice (incorrectly), then assigning it to a scalar variable. You want something like this:
        my @chars = ('a'..'z', 'A'..'Z', 0..9, '.', '/'); my $salt = join '', @chars[rand @chars, rand @chars];
        Note the "@" before "chars"--that denotes an array slice. And since we're taking an array slice and want to end up with a scalar, we need to do a join.
        What if you want to expand the valid characters someday?
        @chars=(a..z,A..Z,0..9,'.','/'); $salt= join '', @chars[rand(@chars), rand(@chars)];
        or even
        my $elem = @chars; $salt = join '', @chars[rand($elem), rand($elem)];
      Try again *sigh*...
      . . . @chars=(A..Z,a..z,0..9,'.','/'); $salt=$chars[rand(64)].$chars[rand(64)]; . . .


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlcraft [id://6136]
Approved by root
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (11)
As of 2015-07-30 22:01 GMT
Find Nodes?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...

    Results (273 votes), past polls