Hi all,
I've ported various hash functions to python if anyone is interested:
def RSHash(key):
a = 378551
b = 63689
hash = 0
for i in range(len(key)) :
hash = hash * a + ord(key[i])
a = a * b
return (hash & 0x7FFFFFFF)
def JSHash(key):
hash = 1315423911
for i in range(len(key)) :
hash ^= ((hash << 5) + ord(key[i]) + (hash >2))
return (hash & 0x7FFFFFFF)
def PJWHash(key):
BitsInUnsignedI nt = 4 * 8
ThreeQuarters = long((BitsInUns ignedInt * 3) / 4)
OneEighth = long(BitsInUnsi gnedInt / 8)
HighBits = (0xFFFFFFFF) << (BitsInUnsigned Int - OneEighth)
hash = 0
test = 0
for i in range(len(key)) :
hash = (hash << OneEighth) + ord(key[i])
test = hash & HighBits
if test != 0:
hash = (( hash ^ (test >ThreeQuarters) ) & (~HighBits));
return (hash & 0x7FFFFFFF)
def ELFHash(key):
hash = 0
x = 0
for i in range(len(key)) :
hash = (hash << 4) + ord(key[i])
x = hash & 0xF0000000
if x != 0:
hash ^= (x >24)
hash &= ~x
return (hash & 0x7FFFFFFF)
def BKDRHash(key):
seed = 131 # 31 131 1313 13131 131313 etc..
hash = 0
for i in range(len(key)) :
hash = (hash * seed) + ord(key[i])
return (hash & 0x7FFFFFFF)
def SDBMHash(key):
hash = 0
for i in range(len(key)) :
hash = ord(key[i]) + (hash << 6) + (hash << 16) - hash;
return (hash & 0x7FFFFFFF)
def DJBHash(key):
hash = 5381
for i in range(len(key)) :
hash = ((hash << 5) + hash) + ord(key[i])
return (hash & 0x7FFFFFFF)
def DEKHash(key):
hash = len(key);
for i in range(len(key)) :
hash = ((hash << 5) ^ (hash >27)) ^ ord(key[i])
return (hash & 0x7FFFFFFF)
def APHash(key):
hash = 0
for i in range(len(key)) :
if ((i & 1) == 0):
hash ^= ((hash << 7) ^ ord(key[i]) ^ (hash >3))
else:
hash ^= (~((hash << 11) ^ ord(key[i]) ^ (hash >5)))
return (hash & 0x7FFFFFFF)
print RSHash ('abcdefghijklm nopqrstuvwxyz12 34567890')
print JSHash ('abcdefghijklm nopqrstuvwxyz12 34567890')
print PJWHash ('abcdefghijklm nopqrstuvwxyz12 34567890')
print ELFHash ('abcdefghijklm nopqrstuvwxyz12 34567890')
print BKDRHash('abcde fghijklmnopqrst uvwxyz123456789 0')
print SDBMHash('abcde fghijklmnopqrst uvwxyz123456789 0')
print DJBHash ('abcdefghijklm nopqrstuvwxyz12 34567890')
print DEKHash ('abcdefghijklm nopqrstuvwxyz12 34567890')
print APHash ('abcdefghijklm nopqrstuvwxyz12 34567890')
Arash Partow
_______________ _______________ _______________ ___________
Be one who knows what they don't know,
Instead of being one who knows not what they don't know,
Thinking they know everything about all things.
http://www.partow.net