地址:

https://burtleburtle.net/bob/hash/spooky.html

SpookyHash is a public domain noncryptographic hash function producing well-distributed 128-bit hash values for byte arrays of any length. It can produce 64-bit and 32-bit hash values too, at the same speed, just use the bottom n bits. The C++ reference implementation is specific to 64-bit x86 platforms, in particular it assumes the processor is little endian. Long keys hash in 3 bytes per cycle, short keys take about 1 byte per cycle, and there is a 30 cycle startup cost. Keys can be supplied in fragments. The function allows a 128-bit seed. It's named SpookyHash because it was released on Halloween.

SpookyHash 概述

SpookyHash 是一种公共领域的非加密哈希函数,旨在快速且良好地分布哈希值。以下是 SpookyHash 的一些关键特性和特点:

关键特性:

  • 哈希输出大小

    • 生成 128 位的哈希值。
    • 还可以生成 64 位和 32 位的哈希值,只需使用 128 位输出的低 n 位。
  • 性能
    • 长键的哈希速度约为每个周期 3 字节。
    • 短键的哈希速度约为每个周期 1 字节。
    • 哈希过程有 30 周期的初始启动成本。
  • 输入灵活性
    • 接受任意长度的字节数组,并可以处理以片段方式提供的键。
  • 种子值
    • 允许使用 128 位的种子生成哈希,这使得相同输入可以产生不同的输出。
  • 平台特定性
    • C++ 的参考实现针对 64 位 x86 平台进行了优化,并假设为小端字节序。

命名:

  • "SpookyHash" 的名称源于其发布的日期,恰好在万圣节。

用例:

SpookyHash 通常用于速度至关重要的应用程序,并且加密安全性不是主要关注点。适用于以下任务:

  • 进行快速查找的数据哈希。
  • 创建数据完整性的校验和。
  • 用于软件中的非加密目的,在这些场景中,哈希冲突是可以接受的。

结论:

SpookyHash 在速度和有效哈希分布之间提供了良好的平衡,使其成为许多非加密应用程序的实用选择。

非加密哈希函数库-SpookyHash的更多相关文章

  1. djb2:一个产生简单的随机分布的哈希函数

    目录 LCG算法 示例代码 djb2 示例代码 为什么选择参数33和 33 was chosen because: 5381 was chosen because 哈希选择参考 LCG算法 djb2与 ...

  2. 为开发者准备的 Android 函数库(2016 年版)

    转载:http://www.androidchina.net/5922.html第三方函数库(译者注:包括第三方提供的 SDK,开源函数库)以惊人的方式助力着 Android 开发,借助这些其他开发人 ...

  3. DSAPI多功能.NET函数库组件

    DSAPI.dll不定期更新,增加功能,故无法每次都发到网上,如果需要获得最新版DSAPI.dll的,请到QQ群:419130936群共享里下载. 简介     dsapi.dll是一款基于.net平 ...

  4. 开发常用的 Android 函数库

    第三方函数库(译者注:包括第三方提供的 SDK,开源函数库)以惊人的方式助力着 Android 开发,借助这些其他开发人员辛勤工作的成果,我们开发起来更轻松和快捷.目前存在成千上万的函数库,如何选择正 ...

  5. Android 为开发者准备的最佳 Android 函数库(2016 年版)

    本文是翻译自 CloudRAIL 的官方博客(https://cloudrail.com/best-android-libraries-for-developers/),本文中分享的 Android ...

  6. 逆向 ctype.h 函数库 isalnum、iscntrl、islower、isxdigit、tolower 函数

    0x01 isalnum 函数 函数原型:int isalnum(int c); 函数功能:检查所传的字符是否是字母和数字 动态链接库:ucrtbase.dll C\C++ 实现: #define _ ...

  7. 安卓开发经验分享:资源、UI、函数库、测试、构建一个都不能少(转)

    除了高超的武艺,每位黑忍者还需要装备最好的武器.在软件开发的世界里,好的工具能让我们的生活变得更轻松,在更短的时间里写出更棒的代码. 时光回到2008年,那时安卓还很年轻.只有几个相关的博客和谷歌官方 ...

  8. Lua中的常用函数库汇总

    lua库函数 这些函数都是Lua编程语言的一部分, 点击这里了解更多. assert(value) - 检查一个值是否为非nil, 若不是则(如果在wow.exe打开调试命令)显示对话框以及输出错误调 ...

  9. PHP函数库(other)

    PHP函数库(other) Session函数: session_abort — Discard session array changes and finish session session_ab ...

  10. 基于DES算法加密的防撞库密码系统项目总结

    项目内容:基于DES算法加密的防撞库密码系统 小组名:zqhzkzkj 目标:1.对用户输入的8位字符进行DES加密,要求用户输入8位密钥 2.对于不同的网站,不同的用户名生成不同的密码 小组成员:周 ...

随机推荐

  1. CentOS7 压缩及打包的常用命令

    gzip gzip 文件名 压缩文件 gzip -d 文件名 解压文件 gunzip 文件名 解压文件 gzip -1 #压缩级别 最高到9 默认是6级别 gzip -f # 强制覆盖同名压缩包 gz ...

  2. Implicit Autoencoder for Point-Cloud Self-Supervised Representation Learning论文阅读

    Implicit Autoencoder for Point-Cloud Self-Supervised Representation Learning 2023 ICCV *Siming Yan, ...

  3. 【Mac渗透测试】之SQL注入Demo

    目录: 一.下载安装sqlmap 二.SQL注入 三.参考文章 一.下载安装sqlmap 1.官网地址:http://sqlmap.org/#download git下载: git clone --d ...

  4. 一个Java类在运行时候,变量是怎么在JVM中分布的呢?

    JVM学习第三篇思考:一个Java类在Jvm内存中是怎么存在的 又名:Java虚拟机的内存模型(JMM)是什么样的. 通过前面两篇文章的学习,我们知道了一个Java类的生命周期及类加载器.我们可以得到 ...

  5. DataV兼容vue3的方法

    发现问题 在使用vue开发大屏时,发现了一个很好用的可视化组件库DataV,不是阿里那个DataV哈,用vue2开发时都一切顺利,直到有一天升级项目到vue3时,发现一堆报错,后面查了下,好像是Dat ...

  6. 【YashanDB知识库】EXP导致主机卡死问题

    问题现象 问题单:exp导出全库1主2备主节点执行,DMP文件30G左右系统卡死,发生主备切换 现象: exp sys/Cod-2022 file=bim20240402.dmp full=y 服务器 ...

  7. Redisson 源码分析及实际应用场景之实现延迟队列

    redis 参考目录: 生产级Redis 高并发分布式锁实战1:高并发分布式锁如何实现 https://www.cnblogs.com/yizhiamumu/p/16556153.html 生产级Re ...

  8. Serilog文档翻译系列(二) - 设置AspNetCore应用程序

    Serilog 日志记录适用于 ASP.NET Core.此包将 ASP.NET Core 的日志消息通过 Serilog 进行路由,使你可以将有关 ASP.NET 内部操作的信息写入与应用程序事件相 ...

  9. 3.1 migration to 5.0

    记入我遇到的问题 : 1. localizer.WithCulture 废弃了 https://github.com/dotnet/aspnetcore/issues/7756 其实讨论很久了, 只是 ...

  10. MyBatis——注解开发

    注解开发完成增删改   * (在完成简单功能时)使用注解开发会比配置文件开发更加方便 查询:@Select 添加:@Insert 修改:@Update 删除:@Delete               ...