我们经常所说的哈希值是什么?通俗点
哈希值是由哈希函数从一个给定的数据计算出来的。哈希函数H和数据v满足如下要求:
1、需要有一个函数(通常是等号)来判断v1和v2是否相等。这里的相等是指逻辑上的。譬如说你实现一个分数的struct,那么只要他们约分后的结果一样,那么这两个分数就是相等的,尽管他们的分子和分母这些数据可能不相等。2、对于v1==v2的情况,必须要有H(v1)==H(v2)。但是并没有要求在不同的时间里,哈希函数一定要给出一样的结果。
当你需要用哈希值来做不同的事情的时候,譬如说加密,譬如说做哈希表,对于需求或者自然所规定的不同的数据集,你要选择不同的哈希函数,才能起到最好的效果。
hash一般用来数据查找。比如有一个数组{1,2,200,300,123,444,555,666,777,222,211,22,33,4,5,33}如何查找这个数组呢,最简单的当然是遍历数组,一个个比。但是如果这个数组很大,这样效率肯定很低。为了更好的查找数组,我们可以把这个数组分成多个子数组,比如分成2个数组,那么可以简单的奇数一个数组,偶数一个数组,如果分成4个,那么可以根据最低端2位来,或者说v%4。v%4这个就是hash值。对整数数据来说,取模是个很简单的hash函数。那如果是字符串呢,常见的有crc,md5等。如md5,无论字符串多长,都计算出32字节的md5值,那么比较32字节会比比较大字符串快很多。hash值相等,原值不一定相等。但是hash值不相等,原值必定不相等。这个特性也用来验证源码是否被修改,如发布一个程序,计算出md5值,那么使用者验证下md5值,如果不相等,则肯定被人修改过了,说不定就被人安装了木马。那么如果相等,则也有可能被修改过的,但是修改过之后md5要一样,就有点难,几乎不可能出现。
通过一个固定的算法,给内容一个固定的标签,并尽可能的保证在内容变动之后,标签值也跟着改变
举个例子,在php中通过md5加密后得到的字符串叫做哈希值,英文名hash.
<?php echo md5('test'); // 就可以知道test经过md5加密之后的值,这个就是哈希值,当然你可以自己写个算法对数据进行一个加密,得到的值也叫做哈希值 ?>
哈希值就是通过一定的运算规则将数据转化后的值
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(5)
哈希值是由哈希函数从一个给定的数据计算出来的。哈希函数H和数据v满足如下要求:
1、需要有一个函数(通常是等号)来判断v1和v2是否相等。这里的相等是指逻辑上的。譬如说你实现一个分数的struct,那么只要他们约分后的结果一样,那么这两个分数就是相等的,尽管他们的分子和分母这些数据可能不相等。
2、对于v1==v2的情况,必须要有H(v1)==H(v2)。但是并没有要求在不同的时间里,哈希函数一定要给出一样的结果。
当你需要用哈希值来做不同的事情的时候,譬如说加密,譬如说做哈希表,对于需求或者自然所规定的不同的数据集,你要选择不同的哈希函数,才能起到最好的效果。
hash一般用来数据查找。
比如有一个数组{1,2,200,300,123,444,555,666,777,222,211,22,33,4,5,33}
如何查找这个数组呢,最简单的当然是遍历数组,一个个比。但是如果这个数组很大,这样效率肯定很低。
为了更好的查找数组,我们可以把这个数组分成多个子数组,比如分成2个数组,那么可以简单的奇数一个数组,偶数一个数组,如果分成4个,那么可以根据最低端2位来,或者说v%4。
v%4这个就是hash值。对整数数据来说,取模是个很简单的hash函数。
那如果是字符串呢,常见的有crc,md5等。如md5,无论字符串多长,都计算出32字节的md5值,那么比较32字节会比比较大字符串快很多。
hash值相等,原值不一定相等。但是hash值不相等,原值必定不相等。这个特性也用来验证源码是否被修改,如发布一个程序,计算出md5值,那么使用者验证下md5值,如果不相等,则肯定被人修改过了,说不定就被人安装了木马。那么如果相等,则也有可能被修改过的,但是修改过之后md5要一样,就有点难,几乎不可能出现。
通过一个固定的算法,给内容一个固定的标签,并尽可能的保证在内容变动之后,标签值也跟着改变
举个例子,在php中通过md5加密后得到的字符串叫做哈希值,英文名hash.
哈希值就是通过一定的运算规则将数据转化后的值