算法——哈希算法

一、什么是哈希算法?

    1、将任意长度的二进制值串映射成固定长度的二进制值串,这个映射规则就是哈希算法;而通过原始数据映射之后得到的二进制值串就是哈希值。

    2、如何设计一个优秀的哈希算法?

        1)单向哈希:从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法)。

        2)篡改无效:对输入数据敏感,哪怕原始数据只修改一个Bit,最后得到的哈希值也大不相同。

        3)散列冲突:散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小。

        4)执行效率:哈希算法执行效率要尽量高效,针对较长的文本也能快速计算哈希值。

  二、常见的哈希算法应用有哪些?

    1、安全加密

     1)常用的加密的哈希算法:MD5(MD5 Message-Digest Algorithm,MD5消息摘要算法)、SHA(Secure Hash Algorithm, 安全散列算法)、DES(Data Encryption Standard,数据加密校准)、AES(Advanced Encryption Standard,高级加密标准)

    2)对用于加密的哈希算法,有两点格外重要,第一点是很难根据哈希值反向推导出原始数据,第二点是散列冲突的概率要小。

    3)在实际开发中要权衡破解难度和计算时间来决定究竟使用哪种加密算法。

    2、唯一标识

        通过哈希算法计算出数据的唯一标识,从而用于高效检索数据。

    3、数据校验

        利用哈希算法对输入数据敏感的特点,可以对数据取哈希值,从而高效校验数据是否被篡改过。

    4、散列函数

        散列函数中用到的哈希算法更加关注散列后的值能不能平均分布,以及散列函数的执行快慢。

    5、负载均衡

        通过哈希算法,对客户端IP地址或者会话ID计算哈希值,将取得的哈希值与服务器列表的大小进去取模运算,最终得到的值就是应该被路由到的服务器编号。利用哈希算法替代映射表,可以穿刺一个会话粘滞的负载均衡策略。

    6、数据分片

        先对数据进行分片,然后采用多台机器处理的方法,来提高处理数据。通过哈希算法对处理的海量的数据进行分片,多机分布式处理,可以突破单机资源的限制

    7、分布式存储

        利用一致性哈希算法,可以解决缓存等分布式系统的扩容、缩容导致数据大量搬移的难题。

       1)一致性算法

            举个例子:一个转盘被分成16个部分,我们分别用0到15来表示这16个部分,现在我们将机器往这16个部分分配,规则如下:

            has(ip)%16。

        假设有3台机器 A,B和C,分别被转盘 2,6,13这个三们位置上。

        当我们想往机器存图片时,图片的分配规则类似:    

        hash(image_id)%16

        现在有3张图片 x,y,z分别被分配到0,5,8 这三个位置。

       很显然,图片都没有被分配到机器的节点上,怎么呢?在转盘上顺时钟往前寻找,第一台遇到的机器,就是它要存的地方。

       当机器分配在转盘上的位置很不平均时; 比如,A,B,C 三台机器分别被分配到 3,6,9 这三个位置,那A要负责存储绝大多数的图片,因为10~3之间的图片都会往A机器上存储,这时要怎么办呢?

        为了使每台机器可以平均的存储图片,我们引入" 虚拟节点”,每台机器可以有多个分身,把虚拟节点(分身)分散到16个位置上,归属到“虚拟节点”的图片,均保存到这台机器的真身上。这样就能解决分配不均匀的问题。

     我们案例用是16个位置,在真实开发应用时,可以把16替换成2的32次方。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容