zoukankan      html  css  js  c++  java
  • 极客时间课程《数据结构与算法之美》笔记07

    哈希算法-如何防止数据库中的用户信息被脱库

    定义和原理:将任意长度的二进制值串映射为固定长度的二进制值串

    要求:

    • 不能反向推导(单向哈希算法)
    • 对输入数据敏感,哪怕只修改了一个Bit,最后得到的哈希值也大不相同。
    • 散列冲突概率要很小。
    • 执行效率要高,针对较长的文本,也能很快地计算出哈希值。

    哈希算法的应用很多,常见有:安全加密、唯一标识、数据校验、散列函数、负载均衡、数据分片、分布式存储

    唯一标识

    在海量的图片信息中,搜索一张图是否存在。任何文件在计算机中都可以表示成二进制码串,将图片的二进制码串开头、中间、结尾分别取100个字节,然后再通过哈希得到唯一标识。(减轻工作量)

    数据校验

    BT下载的时候会做数据校验。

    散列函数

    防范字典攻击引入一个盐(salt),跟用户密码组合在一起,增加密码复杂度,然后用组合后的字符串来做哈希算法加密,将它存储到数据库中,进一步增加破解的难度。
    除此之外,一些公司采用的方法:无论密码长度多少,采用计算hash时间都固定或者足够慢的算法,比如:
    PBKDF2WithHmacSHA1。避免因计算时间不一样而泄露字符串长度信息。

    负载均衡

    负载均衡需要维护一个映射表,哈希算法能很方便地维护这个功能,通过客户端IP或者会话ID计算哈希,通过和服务器列表的大小进行取模运算,最终得到服务器编号。

    数据分片

    统计“搜索关键词”出现的次数,1T的文件日志,记录用户的关键词,快速统计出每个关键词的被搜索次数。
    先对数据进行分片,然后采用多台机器处理的方法,提升速度。关键词计算哈希,跟n取模,最终得到机器编号。同一个关键词会被分配在同一个机器上。
    这个处理过程也是MapReduce的基本设计思想

    分布式存储

    原本10台服务器,增加到12台。原有哈希可能失效,重新计算缓存产生雪崩效应。
    一致性哈希算法:假设有K台机器,将整个范围划分成m个小区间(m远大于k)

  • 相关阅读:
    #leetcode687.最长同值路径
    #leetcode404.所有左叶子节点之和
    #leetcode111.二叉树的最小深度
    #leetcode101.对称二叉树
    #leetcode437.路径总和II
    #leetcode112.路径总和
    #leetcode543.二叉树的直径
    #leetcode110.平衡二叉树
    springboot数据库密码加密-使用自定义加密算法
    PHP加密
  • 原文地址:https://www.cnblogs.com/JackKing-defier/p/11288971.html
Copyright © 2011-2022 走看看