Boston Linux & Unix (BLU) Home | Calendar | Mail Lists | List Archives | Desktop SIG | Hardware Hacking SIG
Wiki | Flickr | PicasaWeb | Video | Maps & Directions | Installfests | Keysignings
Linux Cafe | Meeting Notes | Blog | Linux Links | Bling | About BLU

BLU Discuss list archive


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

crypt and passwords



On Fri, Aug 22, 2003 at 04:54:29PM -0400, David Kramer wrote:
> 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");
>     }
> 
> }

Code is pretty straightforward.  Though your coding style... well,
reminds me of a great quote from Linus:

  First off, I'd suggest printing out a copy of the GNU coding
  standards, and NOT read it.  Burn them, it's a great symbolic
  gesture. 

<grin>

[See /usr/src/linux*/Documentation/CodingStyle]

> Note: This is a MODIFIED version of my encrypted password, but I
> used the real thing:

Reasonable enough.

> [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.

I see two problems.

1. You are passing the salt and the key in the wrong order.
2. At least in the first case, you seem to want it to spit out the
   unencrypted password.  That's not possible.  It's a one-way hash
   function.

    NAME
           crypt - password and data encryption
    
    SYNOPSIS
           #define _XOPEN_SOURCE
           #include <unistd.h>
    
           char *crypt(const char *key, const char *salt);
    
    DESCRIPTION
    
           crypt  is  the  password  encryption function.  It is based on
           the Data Encryption Standard algorithm with  variations
           intended (among  other things)  to discourage use of hardware
           implementations of a key search.
    
           key is a user's typed password.
 
So, if you instead try this:

 $ ./cryptprint 'myrealpassword' '$1$FOOWOmC8$' 

...you should get something that matches the encrypted password in
your passwd file entry.  Hopefully.  ;-)

If you don't, I'll note that the feature you're relying on is a GNU
extension.  You might try not #define-ing _XOPEN_SOURCE, and see if
that makes a difference.  You might even #define _GNU_SOURCE instead.
I doubt either will matter much though.  I'm too lazy to look in the
include files to see if that does anything useful...

I think I had one other comment, but if I did, it seems to have run
away.  Sigh.

-- 
Derek D. Martin
http://www.pizzashack.org/
GPG Key ID: 0xDFBEAD02
-=-=-=-=-
This message is posted from an invalid address.
Replying to it will result in undeliverable mail.
Sorry for the inconvenience.  Thank the spammers.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lists.blu.org/pipermail/discuss/attachments/20030822/e642234f/attachment.sig>



BLU is a member of BostonUserGroups
BLU is a member of BostonUserGroups
We also thank MIT for the use of their facilities.

Valid HTML 4.01! Valid CSS!



Boston Linux & Unix / webmaster@blu.org