Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

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 surveying the Monastery: (9)
As of 2015-09-01 19:50 GMT
Find Nodes?
    Voting Booth?

    My preferred temperature scale is:

    Results (45 votes), past polls