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. asp.net大附件上传,支持断点续传

    以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传  ...

  2. WinDbg常用命令系列---符号相关命令

    ld (Load Symbols) ld命令加载指定模块的符号并更新所有模块信息. ld ModuleName [/f FileName] 参数: ModuleName指定要加载其符号的模块的名称.m ...

  3. swiper轮播图插件

    一.简介 ①Swiper是纯javascript打造的滑动特效插件,面向手机.平板电脑等移动终端.Swiper能实现触屏焦点图.触屏Tab切换.触屏多图切换等常用效果. ②Swiper 是一款免费以及 ...

  4. mysql 查询账户

    查询 mysql 的存在的账户  >select user,host,password from mysql.user; # 可以查询涉及到user. host 链接权限.密码加密文件.

  5. C# DataTable转换为Html

    /// <summary> /// DataTable 转换为 Html /// </summary> /// <param name="dt"> ...

  6. 1-ESP8266 SDK开发基础入门篇--开发环境搭建

    因为今天终于做好了自己的另一块工控板,所以我就开始写基础公开篇的内容,希望自己小小的努力能够帮到大家 自己做的另一块板子 https://www.cnblogs.com/yangfengwu/cate ...

  7. sublime text 3插件改造之AutoFileName去掉.vue文件中img标签后面的width和height,完全去掉!!

    在.vue文件中img标签使用autofilename提示引入文件时,会在文件后面插入宽度高度,如下图: 文件后面会自动插入height和width,其实这两玩意儿在大多数时候并没卵用,然后就开始了百 ...

  8. 02-线性结构4 Pop Sequence (25 分)

    Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...

  9. C#访问https地址实例

    程序访问的网址从http换成了https,安全性更高了,程序对网址的访问也要改一下 C#访问https地址实例如下 namespace ConsoleApp2 { public class Progr ...

  10. 【POJ2251】Dungeon Master

    本题传送门 本题知识点:宽度优先搜索 题意简单.在一个L层高的楼里,去走迷宫,就是问从S走到E的最短路径.每走一格每上或者下一层都算1步. 一开始以为这个"立体迷宫"有点吓到我(题 ...