crypt and passwords

John McKendry jmckendry at comcast.net
Fri Aug 22 18:27:03 EDT 2003


David Kramer wrote:
> 
> On Friday 22 August 2003 09:33 am, Derek Martin wrote:
> > On Fri, Aug 22, 2003 at 02:12:27AM -0400, David Kramer wrote:
> > > I once knew the magic incantations for being able to verify a passwd by
> > > passing the salt from the encrypted password and the unencrypted password
> to
> > > crypt() to see if you got a string matching the encrypted password.  I'm
> > > trying to write a small test program to do this, but I am not getting the
> > > encrypted string back.
> >
> > Can we see the code where you set up the salt and call the function?
> 
> I pass them on the command line so I can play with it until I see it work.
> 
> #define _XOPEN_SOURCE
> #include <unistd.h>
> 
> int main(int argc, char* argv[])
> {
>   char* encrypted;
> 
>   encrypted=crypt(argv[1],argv[2]);
> 
>   if(encrypted)
>     {
>       printf("crypt(%s,%s)='%s'\n",argv[1],argv[2],encrypted);
>     }
>   else
>     {
>       printf("crypt failed.\n");
>     }
> 
> }
> 
> cc -o cryptprint -lcrypt cryptprint.c
> 
> Note: This is a MODIFIED version of my encrypted password, but I used the real
> thing:
> 
> [david at uni crypt]$ sudo grep david /etc/shadow
> david:$1$FOOWOmC8$FOOldOczYfmtvz5PsXyY5/:12023:0:99999:7:::
> 
> [david at uni crypt]$ ./cryptprint '$1$FOOWOmC8$' 'FOOldOczYfmtvz5PsXyY5/'
> crypt($1$FOOWOmC8$,FOOldOczYfmtvz5PsXyY5/)='bmSTpBK8h2lrE'
> 
> [david at uni crypt]$ ./cryptprint '$1$FOOWOmC8$' 'myrealpassword'
> crypt($1$xTxWOmC8$,myrealpassword)='FOO/XEaUQQYMU'
> 
> What comes out doesn't seem to match anything.
> 
>

 Nothing wrong with your program. The args to crypt() are 
(const char* key, const char* salt). key first, then salt. Try 
./cryptprint 'myrealpassword' '$1$FOOWOmC8$' and see if that
doesn't give you the right answer.

John



More information about the Discuss mailing list