2012-10-25 6 views
1

FNV1A_64 해시가 3 가지 구현 중입니다.FNV1A_64가 일치하지 않습니다.

1) Maatkit

SELECT FNV1A_64('1') 

결과 : -5808609649712063748

2) pyhash

import pyhash 
hasher = pyhash.fnv1a_64() 
print hasher('1') 

결과 : 538,760,697,823 39L

3) fnv

./fnv1a64 -s 1 

결과 : 0xaf63ac4c86019afc (12,638,134,423,997,487,000 진수) 모든 결과가 다른 이유

?

답변

6

MySQL과 명령 줄 프로그램에서 동일한 결과를 얻었습니다. 하나는 서명 된 번호를 인쇄하고 다른 하나는 같은 번호의 16 진수를 인쇄했습니다.

>>> import struct 
>>> struct.pack('q', -5808609649712063748) 
'\xfc\x9a\x01\x86L\xacc\xaf' 
>>> struct.unpack('Q', _) 
(12638134423997487868L,) 
>>> 0xaf63ac4c86019afc == _[0] 
True 

파이썬은 기본적으로 전달되지 않으므로 FNV1A_64_INIT이 필요합니다.

>>> FNV1A_64_INIT = 0xcbf29ce484222325 
>>> import pyhash 
>>> hasher = pyhash.fnv1a_64() 
>>> hasher('1', seed=FNV1A_64_INIT) 
12638134423997487868L 
>>> _ == 0xaf63ac4c86019afc 
True 
+2

당신이 놀랍습니다. – twoface88

관련 문제