jones's technical blog

  • 首页
  • 文章归档
  • 默认分类
  • 关于页面

  • 搜索
博客系统 linux 酸酸乳

hash 算法(上): 如何防止数据库中的用户信息被脱库

发表于 2020-07-19 | 分类于 数据结构与算法之美 | 0 | 阅读次数 268

带着问题学习:

  1. 如何防止数据库中的用户信息被脱库:
  2. 你会如何存储用户密码这么重要的数据? 仅仅 MD5 加密一下存储就够了吗?
  3. 在实际开发中, 我们应该如何用 hash 算法解决问题?

一. 什么是 hash 算法

1. 定义

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

2. 如何设计一个优秀的 hash 算法?

1. 单向 hash

从 hash 值不能反向推导出 hash 值, 所以 hash 算法也叫单向 hash 算法.

2. 篡改无效

对输入敏感, 哪怕原始数据只修改一个 bit, 最后得到的 hash 值也完全不同.

3. 散列冲突

散列冲突的概率要很小, 对于不同的原始数据, hash 值相同的概率非常小.

4. 执行效率

hash 算法的执行效率要尽量高效, 针对较长的文本, 也能快速计算 hash 值.

二. hash 算法的常见应用有哪些?

7 个常见应用: 安全加密, 唯一标识, 数据校验, 散列函数, 负载均衡, 数据分片, 分布式存储.

1. 安全加密

  1. 常用于加密的 hash 算法:

MD5: MD5 Message-Digest Algorithm, MD5 消息摘要算法

SHA: Secure Hash Algorithm, 安全散列算法

DES: Data Encryption Standard, 数据加密标准

  1. 对用于加密的 hash 算法, 有两点十分重要, 第一点就是很难根据 hash 值反向推导出原始数据. 第二点就是散列冲突的概率要小.
  2. 在实际开发中要权衡破解难度和计算时间来决定究竟使用哪种加密算法

2. 唯一标识

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

3. 数据校验

通过 hash 算法对输入数据敏感的特点, 可以对数据取 hash 值, 从而高效校验数据是否被篡改过.

4. 散列函数

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

三. 思考

  1. 如何防止数据库中的用户信息被脱库?你会如何存储用户密码这么重要的数据吗?

    1. 使用MD5进行加密
    2. 字典攻击:如果用户信息被“脱库”,黑客虽然拿到的是加密之后的密文,但可以通过“猜”的方式来破解密码,这是因为,有些用户的密码太简单.
    3. 针对字典攻击,我们可以引入一个盐(salt),跟用户密码组合在一起,增加密码的复杂度.
  2. 现在,区块链是一个很火的领域,它被很多人神秘化,不过其底层的实现原理并不复杂. 其中,哈希算法就是它的一个非常重要的理论基础. 你能讲一讲区块链使用的是哪种哈希算法吗?是为了解决什么问题而使用的呢?

jones wechat
更多精彩内容请关注微信公众号
  • 本文作者: jones
  • 本文链接: https://www.lushuaiyu.com/archives/hash算法上如何防止数据库中的用户信息被脱库
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 博客系统 # linux # 酸酸乳
为什么散列表和链表经常会一起使用
hash 算法(下): hash 算法在分布式系统中有哪些应用?
  • 文章目录
  • 站点概览
jones

jones

程序猿

46 日志
16 分类
3 标签
Github E-mail
Creative Commons
0%
© 2021 jones
主题 - NexT.Pisces