[DS+Algo] 011 哈希
1. hash 函数
- 关键词
- 任意长度输入
- 固定长度输出
- 特征
- 理论上输入跟输出并不是一对一
- 实际使用假定不会出现碰撞或者冲突
- 常用算法
- (MD4 以前用,现在不大用了)
- MD5
- SHA-1
- 应用场景
- 数字签名
- 文件校验
2. 哈希表
- 是根据关键码值(Key, value)直接进行访问的数据结构
- 常用算法
- 直接寻址
- 数字分析
- 平方取中
- 折叠法
- 随机数
- 除留余数法
- 冲突处理
- 链地址法
- 建立公共溢出区
- 再散列
- 扩大“范围”
- 性能
- 散列函数是否均匀
3. 密码存储
- 明文 vs 密文
- 明文:可直接读懂含义
- 密文:不可直接读懂
- hash 密码
- 防止密码泄露
- 不能防备字典攻击
- 加盐
- 防备字典攻击
- Python 代码示例
import hashlib
m = hashlib.md5()
m.update(bytes("password", "utf8")) # 这里加盐更好
password = m.hexdigest()
print(password)
后记
此为之前听“刘大拿”老师的所谓能值 9999 的《数据结构与算法》的课时所记笔记
等了很久都没有更新,不出意外是没后续了
因为有一段时间了,所以整理笔记时重听了一部分,倒是有“温故而知新”的惊喜
[DS+Algo] 011 哈希的更多相关文章
- [DS+Algo] 008 查找
1. 常见搜索方法 顺序查找 最优时间复杂度:O(1) 最坏时间复杂度:O(n) 二分法 最优时间复杂度:O(1) 最坏时间复杂度:O(logn) 二叉树 若是"二叉搜索树" 最优 ...
- [DS+Algo] 010 二叉树的遍历
二叉树遍历 深度优先 一般用递归 一些名词 遍历方式 英文 先序 Preorder 中序 Inorder 后序 Postorder 广度优先 一般用队列 Python 代码示例 class Node( ...
- [DS+Algo] 009 树的介绍
目录 1. 树的概念 2. 树的术语 3. 树的种类 4. 常见应用场景 5. 二叉树 1. 树的概念 每个结点(节点)有 0 个或多个子结点 没有父结点的结点称为根结点 每一个非根结点有且只有一个父 ...
- [DS+Algo] 007 希尔排序及其代码实现
步骤 将数组列在一个表(一行多列)中,按特定的步长进行插入排序 步长从 length/2 到 1,每次除 2 将数组转换至表是为了更好地理解这算法,算法本身还是使用数组进行排序 算法性能 (根据步长序 ...
- [DS+Algo] 006 两种简单排序及其代码实现
目录 1. 快速排序 QuickSort 1.1 步骤 1.2 性能分析 1.3 Python 代码示例 2. 归并排序 MergeSort 2.1 步骤 2.2 性能分析 2.3 Python 代码 ...
- [DS+Algo] 005 三种简单排序及其代码实现
目录 1. 冒泡排序 BubbleSort 1.1 算法描述 1.2 性能分析 1.3 Python 代码实现 2. 选择排序 SelectionSort 2.1 算法描述 2.2 选择排序的主要优点 ...
- [DS+Algo] 004 栈、队列及其代码实现
1. Stack FILO (FirstInLastOut) 的链表结构 在程序编译环境上使用较多 常用操作 push pop peek is_empty size Python 代码示例 class ...
- [DS+Algo] 003 一维表结构 Python 代码实现
接上一篇 前言 本篇共 3 个代码实现 严格来说 code1 相当于模仿了 Python 的 list 的部分简单功能 code2 与 code3 简单实现了"循环单链表"与&qu ...
- [DS+Algo] 002 一维表结构
目录 1. 顺序表 1.1 分类 1.2 实现方式 1.3 扩容问题 1.4 操作 2. 链表 2.1 分类 2.2 链表相关操作 2.3 链表 VS 顺序表 3. 关于代码实现 1. 顺序表 1.1 ...
随机推荐
- 在linux 下配置firewalld
查看firewalld 是否开始与运行 以下两种方式都可以 systemctl status firewalld.service firewall-cmd --state 查看所有打开的端口 以下两种 ...
- Spring后台,通过name取值
表单中,有同名控件(text/hidden/checkbox.......)的情况下,采用getParameterValues("name"):String[] 表单中,只有一个n ...
- ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.
docker-compose 的问题 要改环境变量 xed ~/.profile export COMPOSE_HTTP_TIMEOUT=500 export DOCKER_CLIENT_TIMEOU ...
- Springboot 使用Jedis
Springboot 使用Jedis 依赖 <dependency> <groupId>org.springframework.boot</groupId> < ...
- Vue成员与指令介绍
一.Vue介绍 1.什么是vue 通过对框架的了解与运用程度,来决定其在整个项目中的应用范围, 可以独立完成前后端分离式web项目的渐进式JavaScript框架 2.为什么要学vue 三大主流框架之 ...
- es6字符串的扩展——模板
todo1.模板字符串 传统的 JavaScript 语言,输出模板通常是这样写的(下面使用了 jQuery 的方法). $('#result').append( 'There are <b&g ...
- 上一个树形菜单的改进,增添了数据绑定功能而非仅仅的jq特效
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- [EOJ Monthly2019.11][T1]纸条
https://acm.ecnu.edu.cn/ 华东师范大学在线评测网站 今天这个题目来自华东师范大学的校赛,比icpc稍难一些,在2019年11月29日周五19:30开始,持续2.5个小时 以下是 ...
- 1. 参数的传入和添加 argparse.ArgumentParser()
# Edit configuration 传入的参数使用的是--file_dir picture, 获取使用的是argv.file_dir import argparse, sys def parse ...
- linux 下的快捷键操作
概述 今天发现自己码代码的效率有点低,所以查找了一下 linux 常用的快捷键操作,记录下来,供以后开发时参考,相信对其他人也有用. linux 终端常用快捷键 tab:补全命令 Ctrl + u:剪 ...