一、什么是 Hash 算法

散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你所需求的文件。

Hash 算法能将将任意长度的二进制明文映射为较短的二进制串的算法,并且不同的明文很难映射为相同的 Hash 值。

也可以理解为空间映射函数,是从一个非常大的取值空间映射到一个非常小的取值空间,由于不是一对一的映射,Hash 函数转换后不可逆,意思是不可能通过逆操作和 Hash 值还原出原始的值。

散列方法的主要思想是根据结点的关键码值来确定其存储地址:以关键码值K为自变量,通过一定的函数关系h(K)(称为散列函数),计算出对应的函数值来,把这个值解释为结点的存储地址,将结点存入到此存储单元中。检索时,用同样的方法计算地址,然后到相应的单元里去取要找的结点。通过散列方法可以对结点进行快速检索。散列(hash,也称“哈希”)是一种重要的存储方式,也是一种常见的检索方法。

二、Hash 算法有什么特点

Hash 值又称为指纹或者摘要,具有以下特点:

正向快速:给定明文和 Hash 算法,在有限时间和有限资源内能计算得到 Hash 值。
    逆向困难:给定 Hash 值,在有限时间内很难逆推出明文。
    输入敏感:原始输入信息发生任何变化,新的 Hash 值都应该出现很大变化。
    冲突避免:很难找到两段内容不同的明文,使得它们的 Hash 值一致。

三、Hash 算法有哪些

常见 Hash 算法有 MD5 和 SHA 系列,目前 MD5 和 SHA1 已经被破解,一般推荐至少使用 SHA2-256 算法。

下面我们来看具体写一个 Hash 函数需要注意些什么,首先要明白 Hash 函数是把一个大范围映射到一个小范围,目的往往是为了节省空间,使得数据容易保存,另外 Hash 函数也会应用于查找上。

四、Hash 算法碰撞

稍微想一下就可以发现,既然输入数据长度不固定,而输出的哈希值却是固定长度的,这意味着哈希值是一个有限集合,而输入数据则可以是无穷多个,那么建立一对一关系明显是不现实的。所以“碰撞”是必然会发生的,所以一个成熟的哈希算法会有较好的抗冲突性,同时在实现哈希表的结构时也要考虑到哈希冲突的问题。

比如“666”经过 Hash 后是“fae0b27c451c728867a567e8c1bb4e53”,相同 Hash 算法得到的值是一样的。比如 WiFi 密码如果是 8 位纯数字的话,顶多就是 99999999 种可能性,破解这个密码需要做的就是提前生成好 0 到 1 亿数字的 Hash 值,然后做 1 亿次布尔运算(就是 Bool 值判断,0 或者 1),而现在普通 I5 四核 CPU 每秒能到达 200 亿次浮点数计算,做 1 亿次布尔运算也就是秒级别的时间就破解了。

所以密码尽量不要用纯数字,因为根本没有任何安全性。

五、加盐防碰撞

对数字内容进行 Hash 运算,获取唯一的摘要值来指代原始完整的数字内容,利用 Hash 函数的抗碰撞性来确保内容未被篡改。

常用于用户名和密码来确保用户信息安全,为了防止攻击会采用加盐的方法,就是原来的明文加上一个随机数之后的 Hash 值,Hash 值和盐会保存在两个地方,只要不是同时泄漏就很难被破解。

六、Hash算法在信息安全方面的应用

1.文件校验

我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。MD5 Hash算法的“数字指纹”特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。

2.数字签名

Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。 对 Hash 值,又称“数字摘要”进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。

3.鉴权协议

鉴权协议又被称作挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

什么是 Hash 算法?相关推荐

  1. 一致性 hash 算法( consistent hashing )

    原文地址:http://blog.csdn.net/sparkliang/article/details/5279393 consistent hashing 算法早在 1997 年就在论文 Cons ...

  2. 区块链笔记-Hash算法

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 区块链笔记-Hash算法 区块链技术是一系列技术的结合,建立新的技术架构,hash算法是很重要的一块,如果理解不当的地方 ...

  3. 区块链概念:Hash 算法

    链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载. 区块链概念1:Hash 算法 作用在学习哈希算法前,我们需要知道哈希在区块链的作用哈希算法的作用如下:区块链通过 ...

  4. 一致性 Hash 算法的实际应用

    前言 记得一年前分享过一篇<一致性 Hash 算法分析>,当时只是分析了这个算法的实现原理.解决了什么问题等. 但没有实际实现一个这样的算法,毕竟要加深印象还得自己撸一遍,于是本次就当前的 ...

  5. 不会一致性hash算法,劝你简历别写搞过负载均衡

    这两天看到技术群里,有小伙伴在讨论一致性hash算法的问题,正愁没啥写的题目就来了,那就简单介绍下它的原理.下边我们以分布式缓存中经典场景举例,面试中也是经常提及的一些话题,看看什么是一致性hash算 ...

  6. 用人话理解hash算法、特性、唯一性等

    背景 博主在本科的时候曾经参加过数学建模,当初提交参赛论文的时候有两个提交时间点,第一个是提交MD5码的时间,第二个是提交具体参赛论文的时间,当初就很纳闷,直接提交论文不就ok吗?为什么多此一举呢 我 ...

  7. 什么是一致性 Hash 算法

    数据分片 先让我们看一个例子吧 我们经常会用 Redis 做缓存,把一些数据放在上面,以减少数据的压力. 当数据量少,访问压力不大的时候,通常一台Redis就能搞定,为了高可用,弄个主从也就足够了: ...

  8. hash算法_一致性hash算法简介

    一致性hash算法有什么用?我们为什么需要一致性hash算法?这两个问题的答案可以看这篇文章 分布式系统路由算法简介. 了解了一致性hash算法出现的背景,我们来看看什么是一致性hash算法.一致性h ...

  9. 一致性Hash算法(KetamaHash)的c#实现

    Consistent Hashing最大限度地抑制了hash键的重新分布.另外要取得比较好的负载均衡的效果,往往在服务器数量比较少的时候需要增加虚拟节点来保证服务器能均匀的分布在圆环上.因为使用一般的 ...

  10. MurmurHash算法:高运算性能,低碰撞率的hash算法

    MurmurHash算法:高运算性能,低碰撞率,由Austin Appleby创建于2008年,现已应用到Hadoop.libstdc++.nginx.libmemcached等开源系统.2011年A ...

最新文章

  1. Redis的安装及创建节点、部署群集
  2. 思考Web应用的数据流
  3. RedisCluster读写分离改造
  4. php xmlhttp.responsetext,XMLHttpRequest中responseText怎么获取指定div的内容,而不是整个HTML的内容...
  5. mqtt与硬件交互_一个关于小程序Iot的具体实现(MQTT版)
  6. linux怎么卸载yam,linux 基本命令 - osc_foipyam7的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. Eclipse + Apache Axis2 发布RESTful WebService(一)基础知识
  8. 分区助手扩大c盘后自动修复_C盘空间不够,如何扩大?
  9. python: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file:
  10. 非编程人学Python,要注意哪些隐秘的错误认知?
  11. java代码性能优化
  12. oracle数据库课后报告,ORACLE数据库课程设计报告
  13. ps图片去水印-ps图片去水印教程步骤
  14. 邮箱大师手机版服务器异常,网易邮箱大师-高效强大的全平台邮箱客户端
  15. 代码随想录第二十天 LeetCode513、112、113、106、105
  16. Vue3.0 — props写法
  17. Oracle ORA-1628错误的定位分析(2012/1/8)
  18. 2022-2028全球与中国犁螺栓市场现状及未来发展趋势
  19. 数据结构:关于时间复杂度的例题计算
  20. mysql排名第一_SQL查询排名第二名的信息

热门文章

  1. 罗格数据:生命周期动态模拟技术及其在税收领域应用初探 | 会员专栏
  2. 下载微信视频号视频的憨批方法
  3. Android studio 多渠道打包(包括不同的包使用不同的资源文件、不同的包写不同的代码,包名等等)
  4. protobuf引入不同包下的proto文件
  5. 上海市促进文化创意产业发展财政扶持资金项目政策解读
  6. Unity WebGL 打包il2cpp.exe did not run properly!
  7. “科林明伦杯”哈尔滨理工大学第十届部分题解
  8. 2016年头条校招笔试题
  9. python 3 日历模块
  10. 全球域名后缀注册量排行榜!