簡體   English   中英

FNV1A_64不匹配

[英]FNV1A_64 don't match

我正在嘗試FNV1A_64哈希的3種不同實現。

1) Maatkit

SELECT FNV1A_64('1')

結果-5808609649712063748

2) pyhash

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

結果53876069782339L

3) fnv

./fnv1a64 -s 1

結果0xaf63ac4c86019afc (十進制12638134423997487000)

為什么所有結果都不相同?

MySQL和命令行程序給您相同的結果。 一個只打印一個帶符號的數字,另一個只打印一個相同數字的十六進制表示。

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

但是,Python需要FNV1A_64_INIT因為默認情況下未傳遞它。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM