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

一、什么是哈希算法?

1.定义
将任意长度的二进制值串映射成固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。
2.如何设计一个优秀的哈希算法?
①单向哈希:
从哈希值不能反向推导出哈希值(所以哈希算法也叫单向哈希算法)。
②篡改无效:
对输入敏感,哪怕原始数据只修改一个Bit,最后得到的哈希值也大不相同。
③散列冲突:
散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小。
④执行效率:
哈希算法的执行效率要尽量高效,针对较长的文本,也能快速计算哈希值。

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

7个常见应用:安全加密、唯一标识、数据校验、散列函数、负载均衡、数据分片、分布式存储。
1.安全加密
①常用于加密的哈希算法:
MD5:MD5 Message-Digest Algorithm,MD5消息摘要算法
SHA:Secure Hash Algorithm,安全散列算法
DES:Data Encryption Standard,数据加密标准
AES:Advanced Encryption Standard,高级加密标准
②对用于加密的哈希算法,有两点格外重要,第一点是很难根据哈希值反向推导出原始数据,第二点是散列冲突的概率要小。
③在实际开发中要权衡破解难度和计算时间来决定究竟使用哪种加密算法。
2.唯一标识
通过哈希算法计算出数据的唯一标识,从而用于高效检索数据。
3.数据校验
利用哈希算法对输入数据敏感的特点,可以对数据取哈希值,从而高效校验数据是否被篡改过。
4.散列函数
散列函数中用到的哈希算法更加关注散列后的值能不能平均分布,以及散列函数的执行快慢。

三、思考

1.如何防止数据库中的用户信息被脱库?你会如何存储用户密码这么重要的数据吗?
①使用MD5进行加密
②字典攻击:如果用户信息被“脱库”,黑客虽然拿到的是加密之后的密文,但可以通过“猜”的方式来破解密码,这是因为,有些用户的密码太简单。
③针对字典攻击,我们可以引入一个盐(salt),跟用户密码组合在一起,增加密码的复杂度。
④除了hash+salt,现在大多公司都采用无论密码长度多少,计算字符串hash时间都固定或者足够慢的算法如PBKDF2WithHmacSHA1,来降低硬件计算hash速度,减少不同长度字符串计算hash所需时间不一样而泄漏字符串长度信息,进一步减少风险。
2.现在,区块链是一个很火的领域,它被很多人神秘化,不过其底层的实现原理并不复杂。其中,哈希算法就是它的一个非常重要的理论基础。你能讲一讲区块链使用的是哪种哈希算法吗?是为了解决什么问题而使用的呢?
区块链是一块块区块组成的,每个区块分为两部分:区块头和区块体。
区块头保存着 自己区块体 和 上一个区块头 的哈希值。
因为这种链式关系和哈希值的唯一性,只要区块链上任意一个区块被修改过,后面所有区块保存的哈希值就不对了。
区块链使用的是 SHA256 哈希算法,计算哈希值非常耗时,如果要篡改一个区块,就必须重新计算该区块后面所有的区块的哈希值,短时间内几乎不可能做到。

[一步步学数据结构与算法 20]-哈希算法(上)相关推荐

  1. sha算法 哈希算法_SHA1哈希算法教程及其用法示例

    sha算法 哈希算法 SHA1 is a hash algorithm that is created by the National Security Agency (NSA). SHA1 hash ...

  2. 算法:哈希算法的应用场景

    什么是哈希算法 将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值. 一个优秀的哈希算法应该满足下面几个条件: 从哈希值不能 ...

  3. 南京邮电大学数据结构实验四(各种排序算法)

    南邮数据结构实验报告四----各种排序算法 一.各类算法 (一)简单选择排序 (二)直接插入排序 (三)冒泡排序 (四)快速排序 (五)两路合并排序 (六)堆排序 二.全部排序整合+时间测试 三.算法 ...

  4. 【数据结构与算法】哈希算法的原理和应用详解!

    在程序员的实际开发中,哈希算法常常能用得到,本文以哈希算法的原理和应用为核心,和大家详细讲解一下哈希算法的概念.常见算法以及原理.在信息安全的应用等等. 一.概念 哈希表就是一种以 键-值(key-i ...

  5. 【数据结构与算法】哈希算法

    一.什么是哈希算法? 1.定义 将任意长度的二进制值串映射成固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值. 2.如何设计一个优秀的哈希算法? ①单 ...

  6. 「数据结构与算法」哈希算法的原理和应用详解

    在程序员的实际开发中,哈希算法常常能用得到,本文以哈希算法的原理和应用为核心,和大家详细讲解一下哈希算法的概念.常见算法以及原理.在信息安全的应用等等. 一.概念 哈希表就是一种以 键-值(key-i ...

  7. 布谷鸟哈希函数的参数_系统学习hash算法(哈希算法)

    系统学习hash算法(哈希算法) 转载请说明出处. 前言: 关于本文<系统学习hash算法>的由来.在看到了<十一.从头到尾彻底解析Hash 表算法>这篇文章之后,原文中没有暴 ...

  8. 哈希算法python_哈希算法(Python代码实现)

    1.常见的数据查找算法: 众所周知,顺序查找是最简单的查找方式,但要将所有数据遍历一遍所以效率相对较低,对大数据量的査找问题显然不行.二分查找的查找效率虽然非常高但是数据必须有序,而对数据排序通常需要 ...

  9. linux加密框架 crypto 算法管理 - 哈希算法应用实例

    参考链接 Linux加密框架应用示例(二)_家有一希的博客-CSDN博客 linux加密框架 crypto 算法管理 - 应用角度讲解加密框架的运行流程_CHYabc123456hh的博客-CSDN博 ...

最新文章

  1. 扩展欧几里得 POJ 1061
  2. Bugku 杂项(三)
  3. QT的QScriptEngine类的使用
  4. runloop解决Cell上主线程卡顿
  5. Part8 多态性 8.1运算符重载
  6. Hibernate+mysql 中文问题解决方案.
  7. 这不是商业互吹,是学习的宝藏
  8. Delphi查询Sqlserver数据库传入日期类型方法总结
  9. 开源 sql 代码提示工具_有关如何计划开源活动的提示
  10. 中国恒大:正接触独立第三方投资者
  11. shell脚本视频学习1
  12. 2013dgtcs 数对
  13. Zabbix监控之检测程序日志中错误发生的次数
  14. ssh 根据指定端口登录远程服务器
  15. 大数据真实电商数据仓库全流程开发详解
  16. perl语言 入门(转)
  17. 数字逻辑_逻辑函数化简(配项法)例子
  18. HDU 5857 Median(水~)
  19. 生猪价格matlab,猪肉价格的数学模型.doc
  20. 史丰收速算|2014年蓝桥杯B组题解析第四题-fishers

热门文章

  1. widget模式弄不出来_widget模式
  2. Monit的web监控界面
  3. MySQL--学习笔记
  4. 东华大学计算机年薪,东华大学毕业生薪酬高吗?东华大学什么专业工资高 毕业生就业率...
  5. java毕业设计房屋租赁系统(附源码、数据库)
  6. 让应用程序禁止Windows屏幕保护
  7. 爬取豆瓣电影中各种类型电影名称与评分
  8. AppCompat V21:将 Materia Design 兼容到5.0之前的设备
  9. 3016 质子撞击炮 II
  10. 解决.Net 4.0 A potentially dangerous Request.Form value was detected from the client 异常