• 什么是哈希


    什么是哈希

      

      把任意长度的输入通过散列算法变换成固定长度的输出,称为哈希(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、场景六:分布式缓存 

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

  • 相关阅读:
    jQuery.Validate自定义规程的使用案例
    Jquery.Validate验证CheckBoxList,RadioButtonList,DropDownList是否选中
    asp.net(c#)有关 Session 操作的几个误区
    Selenium2+Python自动化-处理浏览器弹窗(转载)
    Selenium2+python自动化29-js处理多窗口【转载】
    Selenium2+python自动化26-js处理内嵌div滚动条【转载】
    Selenium2+python自动化24-js处理富文本(带iframe)【转载】
    Selenium2+python自动化25-js处理日历控件(修改readonly属性)【转载】
    Selenium2+python自动化17-JS处理滚动条【转载】
    Fiddler抓包11-HTTPS证书Actions无法导出问题【转载】
  • 原文地址:https://www.cnblogs.com/chaojiyingxiong/p/14140191.html
Copyright © 2020-2023  润新知