什么是哈希

摘要:
什么是哈希  把任意长度的输入通过散列算法变换成固定长度的输出,称为哈希,又称散列为什么是哈希不可逆就像1+4=5和2+3=5一样,你现在知道我的结果是5,能知道我输入的什么数字吗?哈希算法简单理解就是实现前面提到的哈希函数的算法,用于将任意长度的二进制值串映射为固定长度的二进制值串,映射之后得到的二进制值就是哈希值(散列值)。

什么是哈希

  把任意长度的输入通过散列算法变换成固定长度的输出,称为哈希(hash),又称散列

为什么是哈希不可逆

就像1+4=5和2+3=5一样,你现在知道我的结果是5,能知道我输入的什么数字吗?

哈希算法的概念和特性

我们前面分享了散列表、散列函数和散列冲突,其实也可以译作哈希表、哈希函数和哈希冲突,是一个意思。哈希算法简单理解就是实现前面提到的哈希函数的算法,用于将任意长度的二进制值串映射为固定长度的二进制值串,映射之后得到的二进制值就是哈希值(散列值)。

我们日常开发中最常见的哈希算法应用就是通过 md5 函数对数据进行加密了,md5 就是一个哈希函数,结合 md5 我们可以归纳出哈希算法的一般特性:

  • 从哈希值不能反向推导出原始数据(所以哈希算法也叫单向算法,不可逆);
  • 对输入数据非常敏感,哪怕原始数据只修改了一个比特,最后得到的哈希值也大不相同;
  • 散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小;
  • 哈希算法的执行效率要尽量高效,针对较长的文本,也能快速地计算出哈希值

哈希算法的应用

1、场景一:安全加密

日常用户密码加密通常使用的都是 md5、sha等哈希函数,因为不可逆,而且微小的区别加密之后的结果差距很大,所以安全性更好。

2、场景二:唯一标识

比如 URL 字段或者图片字段要求不能重复,这个时候就可以通过对相应字段值做 md5 处理,将数据统一为 32 位长度从数据库索引构建和查询角度效果更好,此外,还可以对文件之类的二进制数据做 md5 处理,作为唯一标识,这样判定重复文件的时候更快捷。

3、场景三:数据校验

比如从网上下载的很多文件(尤其是P2P站点资源),都会包含一个 MD5 值,用于校验下载数据的完整性,避免数据在中途被劫持篡改。

4、场景五:散列函数

前面已经提到,PHP 中的 md5、sha1、hash 等函数都是基于哈希算法计算散列值

5、场景五:负载均衡

对于同一个客户端上的请求,尤其是已登录用户的请求,需要将其会话请求都路由到同一台机器,以保证数据的一致性,这可以借助哈希算法来实现,通过用户 ID 尾号对总机器数取模(取多少位可以根据机器数定),将结果值作为机器编号。

6、场景六:分布式缓存

分布式缓存和其他机器或数据库的分布式不一样,因为每台机器存放的缓存数据不一致,每当缓存机器扩容时,需要对缓存存放机器进行重新索引(或者部分重新索引),这里应用到的也是哈希算法的思想。

免责声明:文章转载自《什么是哈希》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇通过命令行指定监听的IP和端口ubuntu 设置github秘钥下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python浮点数(小数)运算误差的原因和解决办法

原因解释:浮点数(小数)在计算机中实际是以二进制存储的,并不精确。比如0.1是十进制,转换为二进制后就是一个无限循环的数:0.00011001100110011001100110011001100110011001100110011001100python是以双精度(64bit)来保存浮点数的,后面多余的会被砍掉,所以在电脑上实际保存的已经小于0.1的值了...

python读取二进制文件写入到txt

import os os.chdir(r'C:UsersUsmartDesktopfile_test') fp=open("index.dat",'rb') #以只读二进制文件打开 data = fp.read() fp_txt=open("text.txt",'w') #以只读二进制文件打开 for tmp in data: writedata...

Python 3: 加密简介

Python 3 的标准库中没多少用来解决加密的,不过却有用于处理哈希的库。在这里我们会对其进行一个简单的介绍,但重点会放在两个第三方的软件包:PyCrypto 和 cryptography 上。我们将学习如何使用这两个库,来加密和解密字符串。 哈希 如果需要用到安全哈希算法或是消息摘要算法,那么你可以使用标准库中的 hashlib 模块。这个模块包含了符...

哈希爆破神器Hashcat的用法

目录 HashCat HshCat的使用 使用Hashcat生成字典 使用Hashcat破解NTLMv2 HashCat HashCat系列软件在硬件上支持使用CPU、NVIDIA GPU、ATI GPU来进行密码破解。在操作系统上支持Windows、Linux平台,并且需要安装官方指定版本的显卡驱动程序,如果驱动程序版本不对,可能导致程序无法运行。 H...

UltraEdit注册机原理简单说明

UltraEdit注册机原理By:大志若愚 UltraEdit 是 Windows 下一款流行的老牌文本/HEX 编辑器(非开源)。UltraEdit 正被移植到 Linux 平台。该移植名为 UEX,意即 UltraEdit for Linux。UEX具有原生的 Linux 外观,其界面、配置、热键等与 Windows 版并无二致。对其破解以注册机为最,...

FormData、Blob、File、ArrayBuffer数据类型

XMLHttpRequest 1.0 1.0 中xmlhttpRequest有2个重要的返回属性,reposeText,reposeXml。下面的数据类型都是2.0新增的 FormData对象 我们应该都用过jQuery,其中有个方法叫做serialize(), 作用就是表单序列化,也就是以查询字符串形式获得类表单post/get的数据给Ajax请求,例如...