文件加密,密码加密,os模块
序列化模块 (非常非常重要)
序列化:将一个数据结构(list,dict....)转化成一个特殊的序列(特殊的字符串)的过程.
# l1 = [1, 2, 3]
# ret = str(l1)
# print(ret,type(ret))
# print(eval(ret)) # 不让用 # 文件存取时,遇到的矛盾.
# dic ={'username': '太白', 'password': 123} # dic = {1: {'username': '太白', 'password': 123,'status': False},
# 2:{'username': 'alex', 'password': 123,'status': False}
# } # 这个字典能放在全局么?
# with open('register.json',encoding='utf-8',mode='w') as f1:
# f1.write(str(dic))
# with open('register',encoding='utf-8') as f1:
# ret = f1.read()
# print(ret,type(ret))
#
# # 数据结构 --- > str() 存储在文件, 读取出来时,反转不回去.
# # 网络传输.
# l1 = [i for i in range(100000)]
# # 凡是数据通过网络传出去最终的格式必须bytes
# s1 = str(l1)
# b1 = s1.encode('utf-8')
# print(b1) # b1可以发送出去
#
# s2 = b1.decode('utf-8')
# print(s2,type(s2))
# s2 转化不成列表了. # 我们现在要解决的问题: 如果有一种特殊的字符串,这个字符串可以与任何的数据结构互相转换.
序列化模块分类:
# 序列化模块: 将一中数据结构转化成特殊的序列(特殊的字符串,bytes)并且还可以反转回去. # json模块: 是所有语言公认的一种序列.最最常用的
#所以支持的python数据结构有限: int str bool dict list(tuple),None,float # None ---> Null ----> NUll
# dict --->
# pickle模块: 只能python语言中使用的,序列化模块:
# 支持python所有的数据类型以及对象.
# shevle模块(不讲): 课下了解(只能是文件存取).
json序列化:
两对四个方法:
dumps,loads 主要用于网络传输,可以用于文件的存取.
import json
# dumps,loads 主要用于网络传输,可以用于文件的存取.
# dic = {'username': '太白', 'password': 123,'status': False}
# ret = json.dumps(dic)
# # print(ret,type(ret)) # ret_dict = json.loads(ret)
# print(ret_dict) # 特殊的参数
# dic = {'username': '太白', 'password': 123,'status': False}
# # print(dic)
# ret = json.dumps(dic,ensure_ascii=False,sort_keys=True)
# print(ret,type(ret))
# import json
# dic = {'username': '太白', 'password': 123,'status': False}
# s_dict = json.dumps(dic)
# with open('jsonlx.json',encoding='utf-8',mode='w') as f1:
# f1.write(s_dict)
#
# with open('jsonlx.json',encoding='utf-8') as f2:
# content = f2.read()
# print(json.loads(content))
多个数据如何存储到一个文件中?
# 错误演示:
# import json
# dic1 = {'username': '太白', 'password': 123,'status': False}
# dic2 = {'username': 'alex', 'password': 123,'status': False}
# dic3 = {'username': 'ly', 'password': 123,'status': False}
# with open('jsonmore.json',encoding='utf-8',mode='a') as f1:
# # f1.write(json.dumps(dic1))
# # f1.write(json.dumps(dic2))
# # f1.write(json.dumps(dic3))
# f1.write(f'{json.dumps(dic1)}{json.dumps(dic2)}{json.dumps(dic3)}') #
# with open('jsonmore.json',encoding='utf-8') as f1:
# ret = json.loads(f1.read())
# print(ret) # 正确做法: import json
# dic1 = {'username': '太白', 'password': 123,'status': False}
# dic2 = {'username': 'alex', 'password': 123,'status': False}
# dic3 = {'username': 'ly', 'password': 123,'status': False}
# with open('jsonmore.json',encoding='utf-8',mode='a') as f1:
# f1.write(f'{json.dumps(dic1)}\n{json.dumps(dic2)}\n{json.dumps(dic3)}') # with open('jsonmore.json',encoding='utf-8') as f1:
# for line in f1:
# ret = json.loads(line)
# print(ret,type(ret))pickle序列化:
dumps,loads 只能是网络传输
import pickle # dumps,loads 只能是网络传输
# l1 = ['wusir', '太白', '小黑', 666]
# ret = pickle.dumps(l1)
# # print(ret)
#
# l2 = pickle.loads(ret)
# print(l2,type(l2))
dump load 数据结构存取文件.
import pickle
# l1 = ['wusir', '太白', '小黑', 666]
# with open('pickle练习.pickle',mode='wb') as f1:
# pickle.dump(l1,f1) # with open('pickle练习.pickle', mode='rb') as f1:
# ret = pickle.load(f1)
# print(ret,type(ret)) # 多个数据写入文件
l1 = ['wusir', '太白', '小黑1', 666]
l2 = ['wusir', '太白', '小黑2', 666]
l3 = ['wusir', '太白', '小黑3', 666]
# with open('pickle练习1.pickle',mode='wb') as f1:
# # pickle.dump(l1,f1)
# # pickle.dump(l2,f1)
# # pickle.dump(l3,f1)
#
# with open('pickle练习1.pickle', mode='rb') as f1:
# ret1 = pickle.load(f1)
# ret2 = pickle.load(f1)
# ret3 = pickle.load(f1)
# print(ret1,ret2,ret3)
os模块
# 目录: 文件夹.
# 工作目录,当前目录,父级目录: day17 import os
# print(os.getcwd()) # D:\s23\day17 绝对路径 ***
# os.chdir(r'D:\s23\day9')
# print(os.getcwd())
# print(os.curdir)
# print(os.pardir) # 和文件夹相关 ***
import os
# os.makedirs('dirname1/dirname2/dirname3/dirname4') # 多级目录
# os.removedirs('dirname1/dirname2/dirname3/dirname4') # 截止到有文件的那层
# os.mkdir(r'd:\abc') # 单级目录
# os.rmdir('abc')
# print(os.listdir(r'D:\s23\day15')) #
# os.remove() 删除一个文件 ***
# os.rename("oldname","newname") 重命名文件/目录 ***
# print(os.stat(r'D:\s23\day17\01 昨日内容回顾.py')) # path 和路径相关 ***
# print(os.path.abspath('04 os模块.py')) # D:\s23\day17\01 昨日内容回顾.py
# print(os.path.split(os.path.abspath('01 昨日内容回顾.py'))) # ('D:\\s23\\day17', '01 昨日内容回顾.py')
# print(os.path.dirname(r'D:\s23\day9\01 初始函数.py')) # 获取父级目录
# print(os.path.dirname(os.path.abspath('01 昨日内容回顾.py')))
# print(__file__) # 动态获取当前文件的绝对路径
# 获取当前文件的爷爷级的目录
# print(os.path.dirname(os.path.dirname(__file__)))
# print(os.path.basename(r'D:\s23\day9\01 初始函数.py')) # 获取文件名
# print(os.path.exists(r'D:\s23\day9\02 初始函数.py'))
# 判断是否是绝对路径
# print(os.path.isabs(r'D:\s23\day9\01 初始函数.py'))
# print(os.path.isabs(r'day17/01 昨日内容回顾.py'))
# 判断该路径是否是一个文件路径
# print(os.path.isfile(r'D:\s23\day9\01 初始函数.py'))
# print(os.path.isfile(r'D:\s23\day9'))
# print(os.path.isdir(r'D:\s23\day17\dirname1\dirname2'))
# print(os.path.exists(r'D:\s23\day17\dirname1\dirname2'))
# 判断是否是一个目录(文件夹)
# print(os.path.isdir(r'D:\s23\day17\02 序列化模块.py'))
# D:\s23\day16\评论文章
# path = os.path.join('D:','s23','day20','随便')
# print(path)
# par_dir = os.path.dirname(__file__)
# print(par_dir) # D:/s23/day17
# path = r'D:\s23\day17\db\lydata'
# path = par_dir + '\db' +'\lydata'
# path = os.path.join(par_dir,'db','lydata')
# with open(path,encoding='utf-8',mode='a') as f1:
# f1.write('李业在红浪漫消费998元') # print(os.path.getatime('D:\s23\day17\db\lydata'))
# print(os.path.getmtime('D:\s23\day17\db\lydata'))
# print(os.path.getsize('D:\s23\day17\db\lydata')) # print(os.stat(r'D:\s23\day17\01 昨日内容回顾.py'))
sys模块
import sys
# sys.path ***
# print(sys.version) # 版本 # for i in range(3):
# print(i)
# # exit() # 强制退出
# # quit()
# for i in range(5):
# print(i) # print(sys.platform)hashlib模块
加密模块, 摘要算法,散列算法,等等.它是一堆加密算法的集合.
liye|zmdsb
太白|123
明文形式存储的,带来安全隐患.
hashlib如何加密?
- 将一个bytes类型的数据 通过hashlib进行加密返回 一个等长度的16进制数字.
- 过程不可逆.
- 相同的bytes类型的数据通过相同的加密方法得到的数字绝对相同.
- 不相同的bytes类型的数据通过相同的加密方法得到的数字绝对不相同.
撞库: 111111, 123456, 000000,19980123,
{'202cb962ac59075b964b07152d234b70': 123456}
hashlib 的用途:
- 密码加密.
- 文件一致性校验.
密码加密:
# 密码加密
# md5
# ret = hashlib.md5()
# ret.update('123'.encode('utf-8'))
# s = ret.hexdigest()
# print(s,type(s)) # ret = hashlib.md5()
# ret.update('123'.encode('utf-8'))
# s = ret.hexdigest()
# print(s,type(s))
#
# ret = hashlib.md5()
# ret.update('223'.encode('utf-8'))
# s = ret.hexdigest()
# print(s,type(s)) # ret = hashlib.md5()
# ret.update('22fdslkafjdsklfdsjalfaklfjdslkfjdslkfjdsalf;dsajkfldsjf3'.encode('utf-8'))
# s = ret.hexdigest()
# print(s,type(s)) # 撞库 # ret = hashlib.md5()
# ret.update('123456*@qwe'.encode('utf-8'))
# s = ret.hexdigest()
# print(s,type(s)) # 加固定盐
# ret = hashlib.md5('xxx教育'.encode('utf-8'))
# ret.update('123456'.encode('utf-8'))
# s = ret.hexdigest()
# print(s,type(s)) # 加动态的盐
# username = input('输入用户名:').strip()
# password = input('输入密码').strip()
# ret = hashlib.md5(username[::2].encode('utf-8'))
# ret.update(password.encode('utf-8'))
# s = ret.hexdigest()
# print(s) # sha系列: 安全系数高,耗时高.
# 加盐,加动态盐
# ret = hashlib.sha512()
# ret.update('123456fdklsajflsdfjsdlkafjafkl'.encode('utf-8'))
# s = ret.hexdigest()
# print(s,type(s))
#
文件的一致性校验:
# low版
# import hashlib
# ret = hashlib.md5()
# with open('MD5文件校验',mode='rb') as f1:
# content = f1.read()
# ret.update(content)
# print(ret.hexdigest())
#
# ret = hashlib.md5()
# with open('MD5文件校验1',mode='rb') as f1:
# content = f1.read()
# ret.update(content)
# print(ret.hexdigest()) # ret = hashlib.md5()
# with open(r'D:\s23\day17\python-3.7.4rc1-embed-win32.zip',mode='rb') as f1:
# content = f1.read()
# ret.update(content)
# print(ret.hexdigest())
# d9c18c989c474c7629121c9d59cc429e
# d9c18c989c474c7629121c9d59cc429e # 分步update
# s1 = '老男孩教育 最好的python 讲师 是 太白'
#
# # 1
# ret = hashlib.md5()
# ret.update(s1.encode('utf-8'))
# print(ret.hexdigest())
#
#
# # 2
# ret = hashlib.md5()
# ret.update('老男孩教育'.encode('utf-8'))
# ret.update(' 最好的python'.encode('utf-8'))
# ret.update(' 讲师 是'.encode('utf-8'))
# ret.update(' 太白'.encode('utf-8'))
# print(ret.hexdigest()) # 90c56d265a363292ec70c7074798c913 # 高达上版
import hashlib
def md5_file(path):
ret = hashlib.md5()
with open(path,mode='rb') as f1:
while 1:
content = f1.read(1024)
if content:
ret.update(content)
else:
return ret.hexdigest() print(md5_file(r'D:\s23\day17\python-3.7.4rc1-embed-win32.zip'))
文件加密,密码加密,os模块的更多相关文章
- [转]python中对文件、文件夹的操作——os模块和shutil模块常用说明
转至:http://l90z11.blog.163.com/blog/static/187389042201312153318389/ python中对文件.文件夹的操作需要涉及到os模块和shuti ...
- 核心编程9 文件和文件的输入输出 (os模块)
1 python内建函数open和file 文件打开方便读取:f = open('文件名','模式','缓冲模式') #'r'读取,'w'写入(先清空后创建).'a'追加 详情文件模 ...
- Druid 数据库用户密码加密 代码实现
druid-1.0.16.jar 阿里巴巴的开源数据连接池 jar包 明文密码+私钥(privateKey)加密=加密密码 加密密码+公钥(publicKey)解密=明文密码 程序代码如下: pack ...
- Python文件系统功能:os模块
Python文件系统功能:os模块 1.os模块方法分类 (1)目录: chdir() 改变工作目录 chroot() 设定当前进程的根目录 listdir() 列出指定目录下的所有文件名 mkdir ...
- OS模块文件操作一
1 文件操作 1.1 OS模块 l import os #引入os模块 l import os.path #引入os下的path子模块 l os ...
- 【Python】Python文件系统功能:os模块
1.os模块方法分类 (1)目录: chdir() 改变工作目录 chroot() 设定当前进程的根目录 listdir() 列出指定目录下的所有文件名 mkdir() 创建指定目录 makedirs ...
- python中OS模块操作文件和目录
在python中执行和操作目录和文件的操作是通过内置的python OS模块封装的函数实现的. 首先导入模块,并查看操作系统的类型: >>> import os os.name # ...
- 13、Python文件处理、os模块、json/pickle序列化模块
一.字符编码 Python3中字符串默认为Unicode编码. str类型的数据可以编码成其他字符编码的格式,编码的结果为bytes类型. # coding:gbk x = '上' # 当程序执行时, ...
- Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
转:https://m.sogou.com/web/id=4c468b90-3f64-418c-acf8-990b5fe2a757/keyword=python%20os%E6%A8%A1%E5%9D ...
随机推荐
- 经典线段树 UVALive 3938/UVA 1400
题意:就是相当于动规里面的求最大连续子串,不同的是,这里需要读入一个区间x,y,输出的区间 a,b 且x<=a<=b<=y,使得a b的连续子串最长,而且询问次数达到了10的五次方. ...
- c++ 获取GMT 时间和字符串
需要跨平台,所以可选的只有std 和 boost: boost 比较复杂了 #include <boost/date_time/local_time/local_time.hpp> std ...
- CodeForces-1076B Divisor Subtraction 找规律
题目链接:https://vjudge.net/problem/CodeForces-1076B 题意: 题目要求给定一个数,要求每次减去其最小素因数(既是素数又是其因数),问直到n=0需要做几次运算 ...
- Thread--synchronized不能被继承?!?!!!
参考:http://bbs.csdn.net/topics/380248188 其实真相是这样的,“synchronized不能被继承”,这句话有2种不同意思,一种是比较正常的.很容易让人想到的意思: ...
- POJ 1860 Currency Exchange【bellman-Ford模板题】
传送门:http://poj.org/problem?id=1860 题意:给出每两种货币之间交换的手续费和汇率,求出从当前货币s开始交换回到s,能否使本金增多. 思路:bellman-Ford模板题 ...
- 干货 | 京东云应用负载均衡(ALB)多功能实操
应用负载均衡(Application Load Balancer,简称ALB)是京东云自主研发的一款七层负载均衡产品,主要面向HTTP和HTTPS流量的WEB应用程序,提供灵活的功能配置.应用负载均衡 ...
- 【范式与函数依赖】3NF与BCNF的区别
*本文中码指代候选码,主属性为构成码的属性. 先简要引入几个概念 图1 图2 单拿出来我认为不是很好理解的3NF和BCNF详细的说说. 书上写了,BCNF是完善后的3NF.从图2中显然得出,1-3NF ...
- ZJNU 1223 - 素数距离——高级
因为最大可以达到int极限 明显直接筛选不可能完成 所以从其因子入手 因为任何不是素数的数都有除了1与其自身之外的因子 因此,我们筛出2^(31/2)≍46350之内的所有素数,以其作为因子再将题目给 ...
- Maven--远程仓库的认证
大部分远程仓库无须认证就可以访问,但有时候出于安全方面的考虑,我们需要提供认证信息才能访问一些远程仓库. 配置认证信息和配置仓库信息不同,仓库信息可以直接配置在 POM 文件中,但是认证信息必须配置在 ...
- 10.PoolArena
PoolArena PoolArena成员介绍 PoolChunkList PoolChunkList实例化 PoolChunkList添加PoolChunk PoolChunkList移动PoolC ...