I really give up
QnickQm at alum.mit.edu
QnickQm at alum.mit.edu
Wed Oct 2 11:56:17 EDT 2002
More information about the Python-list mailing list
Wed Oct 2 11:56:17 EDT 2002
- Previous message (by thread): I really give up
- Next message (by thread): I really give up
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
In article <anf1bj$vu$1 at news.tpi.pl>, piter wrote: > Hey guys, > > I really give up! How to convert the following C function into python? > > //----------------------------------------- > unsigned int > make_hash(char *password, unsigned int seed) > { > unsigned int x, y, z; > > y = seed; > > for (x = 0; *password; password++) { > x = (x & 0xffffff00) | *password; > y ^= x; > y += x; > x <<= 8; > y ^= x; > x <<= 8; > y -= x; > x <<= 8; > y ^= x; > > z = y & 0x1f; > y = (y << z) | (y >> (32 - z)); > } > > return y; > } > > //----------------------------------------- > > The obvious solution: [...] > produces odd result due to python's signed arithmetic. One solution: use the low-order bytes of Python's long integers. def make_hash(password, seed): y = long(seed) x = 0L for ch in password: x = (x & 0xffffff00L) | ord(ch) y ^= x y += x x <<= 8 y ^= x x <<= 8 y -= x x <<= 8 y ^= x z = int(y & 0x1f) y &= 0xffffffffL y = ((y << z) | ((y >> (32- z)))) return y & 0xffffffffL Note however that this hashing algorithm is *not* secure. A decent desktop takes less than 4 minutes to try 2**32 passwords with a given seed. Thus, assuming that the hashing algorithm works, I can should be able to find a password that hashes to any desired hash value for a given seed in that amount of time. You may as well store the passwords in plaintext. Instead, may I suggest the sha module? Avoiding-roll-your-own-crypto-like-the-plague-ly y'rs, -- Nick Mathewson <Q nick Q m at alum dot mit dot edu> Remove Q's to respond. No spam.
- Previous message (by thread): I really give up
- Next message (by thread): I really give up
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list