• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 哈希函数取余法除数为何要取质数?

哈希函数取余法除数为何要取质数?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了哈希函数,哈希函数算法,哈希函数值,哈希函数的特点,什么是哈希函数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:哈希函数取余法除数为何要取质数?

解决方案1:

http://www.zhihu.com/question/20806796/answer/21359160

解决方案2:

我上一个问题中弄错的一个地方是讨论了哈希结果暴露原值,而不是避免冲撞这个角度。

恰好等于或接近2^i的风险我认为都只是暴露原值。能轻易操纵哈希目标值的特征,在安全性上是一个巨大的风险——这样就留下了用户使用特意构造的输入,去试图占用其他哈希值桶的攻击方法。

而质数才是用来避免冲撞。如果种子用合数,那么很可能对合数的某个因数取余,所得到的余数仍然是一样的。这样就增加了同一个桶中元素的共同特征,危害了平摊的效果。

举个例子:对4取余如果余1,那么对2取余仍然余1,那么1号桶就必然全部是奇数。同理0号桶必然是偶数。

从这一点来看,质数与接近2^i与否其实完全是两个无关的问题。


我必须说明的是:引文第3段的说法是一个极其想当然的糟糕解释。

理由很简单:Java开发小组会蠢到用简单取余算法去做HashSet么?原文作者分明就是把别人的完整实现蓄意偷来一部分,用来给自己偏执的观点贴金。


最后仍然必须再次声明的是:单纯取余的哈希运算很糟糕。“远离2^i的质数”、“接近2^i的质数”、“恰好等于2^i”都只不过是“没有那么差”、“确实很差”和“差到不能再差”的区别。

要么为冲撞做好准备,给每一个桶都构造一个链表,要么就任何时候都使用SHA-1等成熟且冲撞概率稳定而足够低的Hash算法。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 哈希函数取余法除数为何要取质数?
  • 为何哈希函数取余法要避免2的幂?

相关文章

  • 2017-06-07 django中模型的方法会在实例化的时候自动调用吗
  • 2017-06-07 上传图片报错Code:-1
  • 2017-06-07 laravel如何添加模型方法提示功能
  • 2017-06-07 七牛上传文件的API有没有curl使用范例呢?
  • 2017-06-07 (python)cx_oracle库找不到
  • 2017-06-07 关于最新的C#SDK7214的开放JSON解析器的看法
  • 2017-06-07 MIMETYPE识别错误。
  • 2017-06-07 如何快速删除Mac下没用的Other文件
  • 2017-06-07 关于在Servlet中调用EJB3statelesssessionbean的问题
  • 2017-06-07 七牛的流量真心看不懂是怎么流的,查看网站日志也没有多少个ip

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++源代码问题,求救急用
    • 镜像存储不起作用
    • perl脚本中的中文注释乱码
    • leancloud中,querywhereMatches,"?"+name;查询名字不区分大小写?
    • redis30启用vm
    • pycharmimporterror的相关问题
    • Delphi7webserviceJava传参null
    • JPEG的DCT压缩原理,谁能通俗易懂解释一下?
    • 详解一下javascript中的比较
    • springmvc进行restful后,资源地址发生改变

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有