散列函数特点,散列函数的选择
目录
1.完美散列函数
第二,更多地使用完美散列函数
三。哈希函数MD5/SHA
四、python的哈希函数库hashlib
第五,使用完美哈希函数进行数据一致性检查。
一、完善的哈希函数给定一个数据项,如果一个哈希函数可以将每个数据项映射到不同的槽,那么这个哈希函数可以称为“完美散列函数””。对于D的一组数据,我们总能找到办法设计出一个完美的哈希函数。
但如果数据项变化频繁,就很难有系统的方法来设计相应的完美哈希函数。当然,冲突不是致命的错误,我们会有办法处理的。
获得完美哈希函数的一种方法是扩大哈希表的容量,使所有可能的数据项都能占据不同的槽,但这种方法不适用于可能数据项范围过大的情况。
如果要保存手机号(11位),完美的哈希函数需要哈希表有几百亿个槽,会浪费太多的存储空间。
接下来,一个好的哈希函数需要具备以下特征:
冲突最少(近似完美)计算难度低(额外开销少)充分分散数据项(节约空间)二。完美哈希函数的更多用途除了安排数据项在哈希表中的存储位置,哈希技术还应用于信息处理的很多领域。
由于完美哈希函数可以为任何不同的数据生成不同的哈希值,如果将哈希值视为数据的“指纹”或“摘要”,这一特性被广泛应用于数据一致性检查。
数学上不可能从任何长度的数据生成固定长度的“指纹”,但一个巧妙设计的“准完美”哈希函数可以在实用范围内做到这一点。
作为用于一致性检查的数据“指纹”功能,它需要具有以下特征:
可压缩性:对于任意长度的数据,获得的“指纹”长度是固定的。计算简便:从原始数据中很容易计算出指纹;从指纹计算原始数据是不可能的。抗修改性:原始数据的小改动会引起指纹的大改动。防碰撞:知道原始数据和指纹,很难找到相同指纹的数据(伪造)。三。哈希函数MD5/SHA最著名的近乎完美的哈希函数是MD5和SHA系列函数。
MD5(消息摘要)将任意长度的数据转换成固定的128位(16字节)摘要。(128位二进制已经是一个巨大的数字空间,据说是地球上沙粒的数量)。
SHA(安全哈希算法)是另一种哈希函数,其中:
SHA-0/SHA-1输出160位(20字节)的哈希值
SHA-256/SHA-224分别输出256位和224位的散列值。
SHA-512/SHA-384分别输出512位和384位的散列值。
60位二进制相当于10的48次方,地球上水分子的数量估计是47次方。
26位二进制系统相当于10的77次幂。已知宇宙中所有的基本粒子大约都是72 ~ 87次方。
虽然今年发现了MD5/SHA-0/SHA-1哈希函数,可以在非常特殊的情况下构造个体碰撞(哈希碰撞),但从未有过实际使用的威胁。
四。python Python的Hashlib库自带MD5/SHA系列哈希函数库:hashlib,包括MD5/SHA1/SHA 224/SHA 256/SHA 384/SHA 512等六种哈希函数。
除了对单个字符串进行哈希处理,还可以使用update方法对任意长的数据进行分段计算,这样再多的数据也不会出现内存不足的问题。
动词(verb的缩写)完美哈希函数用于数据一致性检查数据文件一致性判断:对每个文件计算它的哈希值,比较它的哈希值就知道文件内容是否相同。
用于网络文件下载的完整性检查;
对于文件共享系统:网盘中的同一个文件无需多次存储。
加密形式保存密码
只保存密码的哈希值,用户输入密码后,计算并比较哈希值;
可以在不保存密码明文的情况下判断用户是否输入了正确的密码。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。