xxHash的Python绑定
项目描述
xxhash-cffi是xxHash库的Python绑定,由Yann Collet编写。
安装
$ pip install xxhash-cffi
安装前提条件
如果您从源代码安装xxhash-cffi,您可能想要安装以下软件包。
在Debian/Ubuntu上
$ apt-get install libcffi-dev python-dev gcc
在CentOS/Fedora上
$ yum install libcffi-devel python-devel gcc redhat-rpm-config
用法
可以使用模块属性VERSION
和XXHASH_VERSION
分别检索模块版本及其后端xxHash库版本。
>>> import xxhash_cffi as xxhash
>>> xxhash.VERSION
'1.0.1'
>>> xxhash.XXHASH_VERSION
'0.6.2'
此模块符合hashlib规范,这意味着您可以使用与hashlib.md5
相同的方式使用它。
update() – 使用附加字符串更新当前摘要digest() – 返回当前摘要值hexdigest() – 返回当前摘要的十六进制数字字符串intdigest() – 返回当前摘要的整数copy() – 返回当前xxhash对象的副本reset() – 重置状态
md5摘要返回字节,但原始xxh32和xxh64 C API返回整数。虽然此模块已符合hashlib规范,但仍然提供了intdigest()
以获取整数摘要。
此模块提供的哈希算法构造函数是xxh32()
和xxh64()
。
例如,为了获取字节字符串b'Nobody inspects the spammish repetition'
的摘要
>>> import xxhash_cffi as xxhash
>>> x = xxhash.xxh32()
>>> x.update(b'Nobody inspects')
>>> x.update(b' the spammish repetition')
>>> x.digest()
b'\xe2);/'
>>> x.digest_size
4
>>> x.block_size
16
更简洁的
>>> xxhash.xxh32(b'Nobody inspects the spammish repetition').hexdigest()
'e2293b2f'
>>> xxhash.xxh32(b'Nobody inspects the spammish repetition').digest() == x.digest()
True
可以使用一个可选的种子(默认为0)来有预测性地改变结果
>>> import xxhash_cffi as xxhash
>>> xxhash.xxh64('xxhash').hexdigest()
'32dd38952c4bc720'
>>> xxhash.xxh64('xxhash', seed=20141025).hexdigest()
'b559b98d844e0635'
>>> x = xxhash.xxh64(seed=20141025)
>>> x.update('xxhash')
>>> x.hexdigest()
'b559b98d844e0635'
>>> x.intdigest()
13067679811253438005
请注意,xxh32函数接受无符号32位整数作为种子,而xxh64函数接受无符号64位整数。虽然无符号整数溢出是定义良好的行为,但最好避免这种情况发生。
>>> xxhash.xxh32('I want an unsigned 32-bit seed!', seed=0).hexdigest()
'f7a35af8'
>>> xxhash.xxh32('I want an unsigned 32-bit seed!', seed=2**32).hexdigest()
'f7a35af8'
>>> xxhash.xxh32('I want an unsigned 32-bit seed!', seed=1).hexdigest()
'd8d4b4ba'
>>> xxhash.xxh32('I want an unsigned 32-bit seed!', seed=2**32+1).hexdigest()
'd8d4b4ba'
>>>
>>> xxhash.xxh64('I want an unsigned 64-bit seed!', seed=0).hexdigest()
'd4cb0a70a2b8c7c1'
>>> xxhash.xxh64('I want an unsigned 64-bit seed!', seed=2**64).hexdigest()
'd4cb0a70a2b8c7c1'
>>> xxhash.xxh64('I want an unsigned 64-bit seed!', seed=1).hexdigest()
'ce5087f12470d961'
>>> xxhash.xxh64('I want an unsigned 64-bit seed!', seed=2**64+1).hexdigest()
'ce5087f12470d961'
digest() 返回整数摘要的大端表示形式的字节。
>>> import xxhash_cffi as xxhash
>>> h = xxhash.xxh64()
>>> h.digest()
b'\xefF\xdb7Q\xd8\xe9\x99'
>>> h.intdigest().to_bytes(8, 'big')
b'\xefF\xdb7Q\xd8\xe9\x99'
>>> h.hexdigest()
'ef46db3751d8e999'
>>> format(h.intdigest(), '016x')
'ef46db3751d8e999'
>>> h.intdigest()
17241709254077376921
>>> int(h.hexdigest(), 16)
17241709254077376921
除了上述xxh32/xxh64函数之外,还提供了oneshot函数。通过使用oneshot函数,我们可以避免在堆上分配XXH32/64_state。
xxh32_digest(bytes, seed=0)xxh32_intdigest(bytes, seed=0)xxh32_hexdigest(bytes, seed=0)xxh64_digest(bytes, seed=0)xxh64_intdigest(bytes, seed=0)xxh64_hexdigest(bytes, seed=0)
>>> import xxhash_cffi as xxhash
>>> xxhash.xxh64('a').digest() == xxhash.xxh64_digest('a')
True
>>> xxhash.xxh64('a').intdigest() == xxhash.xxh64_intdigest('a')
True
>>> xxhash.xxh64('a').hexdigest() == xxhash.xxh64_hexdigest('a')
True
>>> xxhash.xxh64_hexdigest('xxhash', seed=20141025)
'b559b98d844e0635'
>>> xxhash.xxh64_intdigest('xxhash', seed=20141025)
13067679811253438005L
>>> xxhash.xxh64_digest('xxhash', seed=20141025)
'\xb5Y\xb9\x8d\x84N\x065'
注意事项
种子溢出
xxh32函数接受无符号32位整数作为种子,xxh64函数接受无符号64位整数作为种子。请确保种子大于或等于0。
不要在HMAC中使用XXHASH
虽然可以将xxhash用作HMAC哈希函数,但强烈建议不要这样做。
xxhash不是加密哈希函数,它是一个旨在速度和质量的非加密哈希算法。不要将xxhash放在需要加密哈希函数的任何位置。
版权和许可
版权(c)2014-2018 杜越 - https://github.com/ifduyue
在BSD 2-Clause License许可下发布
v1.3.0 2018-12-16
轮现在是自动构建的
将CFFI变体拆分为单独的包 ifduyue/python-xxhash-cffi
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建的分发
哈希值 for xxhash_cffi-1.3.0-cp37-cp37m-manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 33fd1754faaa858e4a96bb9b26e53548aa2e1bb5332f3db573df5029ce998541 |
|
MD5 | 046aaefd3ac6afd71fea49c8f3bf14f3 |
|
BLAKE2b-256 | a5970b36b8bff32903d19e31f458ef9932ec6549836d2e618f1bcad21b4d3d70 |
哈希值 for xxhash_cffi-1.3.0-cp37-cp37m-manylinux1_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5f12e320ba44d8c28715f3c9e65de11ea2a2cccc1eef14161e977b8c803b3de3 |
|
MD5 | c9bcd51b269598857ee0b7cbb201a05f |
|
BLAKE2b-256 | 52f61f5a43b31f664566b567c626cb20d7f0022debafbca2776274a0826c8127 |
哈希值 for xxhash_cffi-1.3.0-cp37-cp37m-macosx_10_6_intel.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d2100f4a7615139574af935af1d99e8d2f3e8ce79d0b3ff1879c8b0b6b9808e7 |
|
MD5 | 6438fbaf24108564514848ee66090b89 |
|
BLAKE2b-256 | c656beb03eee74b7627af0ec5f8257ed0c170254c303e328e587aa237fc522de |
哈希值 for xxhash_cffi-1.3.0-cp36-cp36m-manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2cd2f67175a0054c399428aa4fc3e3d964512d023e15058aca6995a33acf0ade |
|
MD5 | 563dbccc1b45f414c57a300f2324446a |
|
BLAKE2b-256 | 753db97dd993bb645909bc188d43a981a80d3401d1d6b948dc3144df47c767f0 |
哈希值 for xxhash_cffi-1.3.0-cp36-cp36m-manylinux1_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e5be7d5e8b98e1ffa569df671e89ebbe13a303eeb632bc5e98473732baa8d7f5 |
|
MD5 | cf5654983ec342cd3afc53014d1dd78d |
|
BLAKE2b-256 | 6271f8d3399a69c857e722f17e02a0bf4879deff20dad77cc92c3aa8c3d46a23 |
哈希值 for xxhash_cffi-1.3.0-cp36-cp36m-macosx_10_6_intel.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d803011723bf214868139a7c59f69b7fe504b209311b79d6b83d4e2d3ca75d9f |
|
MD5 | accb00a96af87bf7802b2fdd3e9261ea |
|
BLAKE2b-256 | 88ad221d0a476ebc9de96e87bf2d20aa435c5465dcb204f716ff2b4cb390c6fa |
哈希值 用于 xxhash_cffi-1.3.0-cp35-cp35m-manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 74e01a9a358c46476ba16af02bd9949fc0dd064d729aee8ee7aa1f500a66128e |
|
MD5 | 0acdd6c46bf572922beaa8c5204e9280 |
|
BLAKE2b-256 | 1c7ede09a900e6781ffe5cd8929a961cabb342217a7e8dac35d8271cd2822a5b |
哈希值 用于 xxhash_cffi-1.3.0-cp35-cp35m-manylinux1_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 96ba73c819ec12df7bbf76e0941d0c9110469d38f432d94e81d1f09c1d940ff5 |
|
MD5 | 9b2f27eb5450d250baecbf239cf5a0c6 |
|
BLAKE2b-256 | 546c3ee02b86a16babd26aa37b253387fc27aa1d67ffd81b9d1167c296d2ebe8 |
哈希值 用于 xxhash_cffi-1.3.0-cp35-cp35m-macosx_10_6_intel.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 43f07fb86f90f3aace81ad67ce601d446f641a35f693b7278745373079d7c49f |
|
MD5 | 40ab80a66344b3af9aa2b2d53b8400b7 |
|
BLAKE2b-256 | 8f58d814de01f67dcf41c1ad04c8f71d712222b993d1162f7f1f4762e8fc473b |
哈希值 用于 xxhash_cffi-1.3.0-cp34-cp34m-manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dfe98357f67986e2d49f23863abb043ab98421088410e3c5babb47901d4ae2c0 |
|
MD5 | 3e98e6bc0504d9e57085ff1b80e2c0a7 |
|
BLAKE2b-256 | 6865ab21fa638e82414ebbdd40acbf6bece8e82f64c663c3b50787903aa6c348 |
哈希值 用于 xxhash_cffi-1.3.0-cp34-cp34m-manylinux1_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a553163680fda2eb3a3e96c84ef7a18c7629030b3cc9c55903c69b9e1dc90ea1 |
|
MD5 | c188f16894cc1ade4e160246cf830e69 |
|
BLAKE2b-256 | cce4b2098864b7ab3fd436557805b8be26a12344320c22394ea90feb7716b469 |
哈希值 用于 xxhash_cffi-1.3.0-cp34-cp34m-macosx_10_6_intel.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d3f9dea5df21170c2cfac752c3e09193c240a025a3e875311c9d242dcde04ce2 |
|
MD5 | bcc91d61838e49e60e6e90f8596feca3 |
|
BLAKE2b-256 | bd8271b1e1d7fc7783eea73bb237a6327fda612322a826d198f2c95f651661b6 |
哈希值 用于 xxhash_cffi-1.3.0-cp27-cp27mu-manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f9da9f4c42eea5125f06d5b60ab707ad1ddc8819cd3d401990013df0d0b0ad19 |
|
MD5 | 1ea983bef52750ea52b35f778456af7a |
|
BLAKE2b-256 | 2d4b8ada74c777992c7031d3766e8d88b70b73a76aaecd13f8a4add09483e419 |
哈希值 用于 xxhash_cffi-1.3.0-cp27-cp27mu-manylinux1_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e2030d9a6c5204a16b8c60f987c92098641d96724135810e7749048e1eba7187 |
|
MD5 | 915428af4f06dbf161aede044f81f1f8 |
|
BLAKE2b-256 | e8b76849cd6214fc63389a99354417eff613b885661088140369f8e90258ccb3 |
散列值 for xxhash_cffi-1.3.0-cp27-cp27m-manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 022668c97547cc2d6deba8d9c0240187fc392bd66ecc788f51e5cf324b04a38f |
|
MD5 | f5d7a7f9b66ce95e16826add3b0d673e |
|
BLAKE2b-256 | a02b672ffb7670aa9907a7ed1a4b7f891bc4a2c72433ed6ed021bd222e1b57eb |
散列值 for xxhash_cffi-1.3.0-cp27-cp27m-manylinux1_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 71861ee0ea015deef9c224b0cd403b272846d9fd80c6d5c6ba233b2f988b38d1 |
|
MD5 | 4159a95af26043748b021cc7a6df8216 |
|
BLAKE2b-256 | 25c49caf97d23527409839e6aaf1e6145ed339cc25346b3f92c9b4bb193b6403 |
散列值 for xxhash_cffi-1.3.0-cp27-cp27m-macosx_10_6_intel.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1143c2b0484829d7ac28590557bb8346aaa4b54840a54274d0f5b2d635ab1d93 |
|
MD5 | 43e0b05d42dce32e9d83a1bad886da27 |
|
BLAKE2b-256 | aca27065914868b5059bed5b6410ad758e7034eb1eaf3bacc45a3a0294626c2f |