8.hashlib 加密模块

​ 主要用于加密和校验

常见密文:md5,sha1,sha256,sha512

  1. 只要明文相同,密文就相同
  2. 只要明文不相同,密文就是不相同的
  3. 不能反逆(不能解密)--md5中国破解了

最常用的是MD5(用于校验),平时加密时使用sha1

'''加密
1.指定要加密的方式
2.将要加密的内容转成字节
3.合成
'''
import hashlib
md5 = hashlib.md5()#1
md5 = hashlib.sha1()
md5 = hashlib.sha256()
md5 = hashlib.sha512() md5.update("alex123".encode("utf-8"))#2 密文与编码方式无关,只与加密方式和明文有关
print(md5.hexdigest())#3

加盐:

#1.固定加盐
import hashlib
pwd = "wang123"
md5 = hashlib.md5("我去".encode("utf-8"))
md5 = hashlib.md5(b"alex07yu")
md5.update(pwd.encode("utf-8"))
print(md5.hexdigest()) #2.动态加盐
user = input("username:")
pwd = input("passwd:")
md5 = hashlib.md5(user.encode("utf-8"))
md5.update(pwd.encode("utf-8"))
print(md5.hexigest()) #3.读取文件内容加密
f = open(r"F:\s24\day17\python-3.6.6-amd64.exe",'rb')
md5 = hashlib.md5()
md5.update(f.read())
print(md5.hexdigest()) #4.逐步加密和一次加密结果一样
import hashlib
pwd1 = 'a'
pwd2 = 'b'
pwd3 = 'ab'
md5 = hashlib.md5()
md5.update(pwd1.encode("utf-8"))
md5.update(pwd2.encode("utf-8"))
print(md5.hexdigest())
md6 = hashlib.md5()
md6.update(pwd3.encode("utf-8")) #5.接3,当文件太大时,逐步加密,节省内存
import hashlib
f = open(f"F:\s24\day17\python-3.6.6-amd64.exe",'rb')
md5 = hashlib.md5()
while 1:
msg = f.read(1024)#每次读取1024字节
if msg:
md5.update(msg)
else:
print(md5.hexdigest())
break

9.collections

  1. namedtuple :命名元组。生成可以使用的名字来访问元素内容的tuple
  2. deque:双端队列,可以快速地从另一侧追加和删除对象
  3. Counter:计数器,用来计算重复的元素个数
  4. defaultdict:带有默认值的字典
  5. OrdereDict
from collections import namedtuple
#1.
point = namedtuple('a',['x','y'])
p = point(1,2)
print(p)
#2.
from collections import deque
lst1 = depue([1,2,3,4,5])
lst1.append(8)
lst1.appendleft(0)
lst1.pop()
lst1.popleft()
print(lst1[4])
#3.***
from collections import Counter
s1 = '13215af13213a1dfa3sdfa3'
print(dict(Count(s1)))
s2 = [1,1,2,2,3,3]
print(dict(Count(s2)))
s3 = (1,2,3,3,4,5,6,7,78)
print(dict(Count(s3)))
#4.
from collections import defaultdict
dic = defaultdict(list)
dic['k1'].append(1)
print(dic)
#结果:defaultdict(<class 'list'>, {'k1': [1]})
'''
将列表中大于66的放到k1中,其余的放到k2中,用带有默认值的字典模块做
'''
li = [11,22,33,44,55,77,88,99,90]
from collections import defaultdict
dic = defaultdict(set)
for i in li:
if i > 60:
dic['k1'].add(i)
else:
dic['k2'].add(i)
print(dic)
#5.了解

10.re模块

正则:就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。正则就是用来描述一类事物的规则

元字符 匹配规则
\w 匹配字母(包含中文)或数字或下划线
\W 匹配除字母(包含中文),数字或下划线
\s 匹配任意的空白符
\S 匹配任意的非空白符
\d 匹配数字,等价于[0-9]
\D 匹配非数字
\A 从字符串开头匹配
\Z 匹配字符串结束,如果是换行,只匹配到换行前的结果
\n 匹配一个换行符
\t 匹配一个制表符
^ 匹配字符串的开始
$ 匹配字符串的结尾
. 匹配任意字符,除换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
[] 匹配字符组中的字符,[abc]表示a,b,c。[a-z]表示a到z单个字符,'-'不会匹配到,当放到开头才会匹配--> [-a-z]
[^] 匹配除了字符组中的字符外的所有字符,[^abc]表示非a或者b或者c的单个字符
* 前一个字符0次或无限次扩展,abc* 表示 ab、abc、abcc、abccc……
+ 前一个字符1次或无限次扩展,
前一个字符0次或一次扩展
{n} 扩展前一个字符n次,ab{2}c表示abbc
{m,n} 匹配扩展前一个字符扩展m到n次,含n次,贪婪匹配
| 左右任意表达一个,a|b匹配a或b
() 匹配括号内的表达式,表示一个组,括号内可用|,(abc|def)表示abc或def。m(?:)t将括号内外一起输出
1.方法
  1. re.search():在字符串中搜索匹配正则表达式的第一个位置,并返回math对象,.group()查看对象。

  2. re.match():从字符串的开始位置匹配正则表达式,并返回match对象

    match对象没有匹配到就返回None

import re
#search找到第一个就停止查找
print(re.search(r'[1-9]\d{3}','100086'))
print(re.search(r'[1-9]\d{3}','00086001500012').group())
#match只从开头找,开头不符合就不查找了
print(re.search(r'[1-9]\d{3}','100086'))
print(re.match(r'[1-9]\d{3}','00086002154'))
  1. re.findall():搜索字符串,以列表的类型返回全部等匹配的子串
  2. re.split():将一个字符串按照正则表达式匹配的结果进行分割,返回列表
  3. re.sub():在一个字符串中替代所有匹配的正则表达式的子串,返回替代后的字符串
import re
#分割
s = 'aa#所谓结案,2123:lkj!无*所谓'
print(re.split("[#,:!*]",s)) #替换
print(re.sub("所谓","me",s))
  1. re.finditer():返回的是一个迭代器地址
import re
f = re.finditer("\w","你是垃圾")
print(next(f).group()) for i in f:
print(i)
2.re的两种等价方法:
  1. 函数式用法:一次性操作
  2. 面向对象用法:编译后可对此操作,re.compile()-->定义匹配规则
import
#1.函数式用法:
rst = re.search(r'[1-9]\d{5}','BIT 100086')
print(rst.group())
#2.面向对象:
pat = re.compile(r'[1-9]\d{5}')
rst = pst.serch('BIT 100086')
3.正则的贪婪匹配和最小匹配(默认为贪婪匹配)
符号 匹配规则 贪婪规则
*? 前一个字符0或无限次扩展 最小匹配
+? 1或 最小匹配
?? 0或1 最小匹配
{m,n} 扩展前一个字符m-n次含n 贪婪匹配
import re
#贪婪匹配
match = re.search(r'py.*n','pyanbncndn')
print(match.group(0))
#最小匹配加'?'
match = re.search(r'py.*?n','pyanbncndn')
print(match.group(0))
4.起名字

m(?<名字>\w+)t group("名字")

import re
print(re.search("(?<ta_name>\w+)\w+",h1hellth).group("ta_name"))

python模块知识三 hashlib 加密模块、collections、re模块的更多相关文章

  1. Python基础知识(三)

    Python基础知识(三) 一丶整型 #二进制转成十进制的方法 # 128 64 32 16 8 4 2 1 1 1 1 1 1 1 例如数字5 : 101 #十进制转成二进制的方法 递归除取余数,从 ...

  2. hashlib加密模块和logging模块,购物车项目

    hashlib加密模块 简介 hashlib模块是一个提供了字符串加密功能的模块,包含MD5和SHA的加密算法.具体的加密支持有: MD5,sha1,sha224,sha256, sha384, sh ...

  3. Python笔记(三):构建发布模块

      (一)     准备工作 1.   新建一个模块(名称自定义),存放要发布的模块代码. 2.   新建一个setup.py的模块(存放模块的元数据,描述相关信息). 3.   新建一个文件夹(名称 ...

  4. python基础知识三

    在考虑它们的运算时,一定要想到python是一门面向对象语言,它对类型的要求是不那么严格的,因为在完全面向对象的语言中,一切都是对象. 那么让我们重新 考虑+ -  *  /等操作,不再拘泥于传统的数 ...

  5. python基础知识三——try与except处理异常语句

    try/except介绍 与其他语言相同,在python中,try/except语句主要是用于处理程序正常执行过程中出现的一些异常情况,如语法错(python作为脚本语言没有编译的环节,在执行过程中对 ...

  6. python函数知识三 函数名的使用、格式化、递归

    12.函数名的使用 函数是第一类对象 函数名可以当做值被赋值给变量 def func(): print(1) return a = func print(func) print(a) a() 函数名可 ...

  7. python基础知识三 字典-dict + 菜中菜

    3.7字典:dict+菜中菜 1.简介 ​ 无序,可修改,用于存储数据,大量,比列表快,将数据和数据之间关联 ​ 定义:dict1 = {'cx':10,'liwenhu':80,'zhangyu': ...

  8. Python学习 :常用模块(三)----- 日志记录

    常用模块(三) 七.logging模块 日志中包含的信息应有正常的程序访问日志,还可能有错误.警告等信息输出 python的 logging 模块提供了标准的日志接口,你可以通过它存储各种格式的日志, ...

  9. python基础知识你学会了多少

    前言 学习是一个循序渐进的过程,不在于你学了多少,而在于你学会了多少.(装个b好吧,hhhh) 知识总结 之前一直想在网上找一个总结好的笔记,但是一直都没有找到,因此下定决心要总结一下,里面的都是在学 ...

随机推荐

  1. SPI总线协议理解

    1.什么是SPI: 是摩托罗拉公司设计的一种全双工通信.高速的.同步的串行外部设备通信协议. 2.SPI作用: 用于设备之间的数据交互. 3.SPI由什么构成: 1)MOSI:主设备输出从设备输入线, ...

  2. Python 06 Geany的基本使用2

    原文:https://www.cnblogs.com/denny402/p/5096001.html 功能:打开图片 1.下载库 pip install matplotlib 2.编写代码,将代码粘贴 ...

  3. 洛谷P4408 逃学的小孩

    题目 求树的直径,因为任意两个居住点之间有且只有一条通路,所以这是一棵树. 根据题意父母先从C去A,再去B,或者反过来. 我们一定是要让A到B最大,也要让C到A和B的最小值最大. AB最大一定就是直径 ...

  4. GoCN每日新闻(2019-10-20)

    GoCN每日新闻(2019-10-20) slakc是如何构建共享频道的 https://slack.engineering/how-slack-built-shared-channels-8d42c ...

  5. 框架 get 请求乱码

    解决方案: 在 tomcat 配置文件中添加 URIEncoding="utf-8"

  6. Koa 脚手架创建项目

    Koa 脚手架创建项目 通过应用 koa 脚手架生成工具 可以快速创建一个基于 koa2 的应用的骨架 全局安装koa npm install koa-generator -g //必须安装到全局 创 ...

  7. 【算法编程 C++ Python】根据前序遍历、中序遍历重建二叉树

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...

  8. arts lettcode 题目

    编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow" ...

  9. [转]OpenGL图形渲染管线、VBO、VAO、EBO概念及用例

    直接给出原文链接吧 1.OpenGL图形渲染管线.VBO.VAO.EBO概念及用例 2.OpenGL中glVertex.显示列表(glCallList).顶点数组(Vertex array).VBO及 ...

  10. 查看DDR的频率【学习笔记】

    SDM439平台如何查看DDR的频率 通过访问如下节点查询:cat /sys/kernel/debug/clk/bimc_clk/measure 681.6MHz and higher frequen ...