shelve和hashlib模块
一、shelve模块
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式。
注意:
shelve模块封装了pickle模块,,允许多次dump和load,但只能在python中使用,比pickle要强大许多。
#!/usr/bin/env python3
#-*- coding:utf-8 -*-
import shelve f = shelve.open('shelve_test') # 打开文件
names = ['yr','hj','qw','xwf']
info = {'name':['yr','dds'],'age':[20,21]} f['names'] = names # 持久化列表
f['info_dict'] = info
f.close() f = shelve.open('shelve_test')
print(list(f.keys())) # ['names', 'info_dict']
print(f['names'][1],f['info_dict']['age'][1]) # hj 21 del f['names'] # 仅能删除第一层的’k‘值
print(list(f.items())) # [('info_dict', {'name': ['yr', 'dds'], 'age': [20, 21]})] f['job'] = ['stu1','stu2'] # 创建
print(list(f.items())) # [('info_dict', {'name': ['yr', 'dds'], 'age': [20, 21]}), ('job', ['stu1', 'stu2'])] f['job'] = ['s1','s2'] # 修改第一层
print(list(f.items())) # [('info_dict', {'name': ['yr', 'dds'], 'age': [20, 21]}), ('job', ['s1', 's2'])]
二、hashlib模块
1、Hash:
简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。HASH主要用于信息安全领域中加密算法,
他把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值.也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系. 2、MD5:
MD5讯息摘要演算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,
可以产生出一个128位的散列值(hash value),用于确保信息传输完整一致. 3、MD5功能
输入任意长度的信息,经过处理,输出为128位的信息(数字指纹);
不同的输入得到的不同的结果(唯一性) 4、MD5算法的特点
压缩性:任意长度的数据,算出的MD5值的长度都是固定的 容易计算:从原数据计算出MD5值很容易
抗修改性:对原数据进行任何改动,修改一个字节生成的MD5值区别也会很大 强抗碰撞:已知原数据和MD5,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。 5、MD5用途
<1>、防止被篡改 <2>、防止直接看到明文
<3>、防止抵赖(数字签名)
6、用法:
import hashlib
# 用于加密相关的操作,3.x里代替了md5模块和sha模块,
# 主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
m = hashlib.md5()
m.update(b'Hello')
m.update(b'It is me')
print(m.digest()) # 2进制格式hash
print(len(m.hexdigest())) #16进制格式hash # MD5
hash = hashlib.md5()
hash.update(b'admin') # 必须转为bytes类型
print(hash.hexdigest()) # 21232f297a57a5a743894a0e4a801fc3 # SHA1
hash = hashlib.sha1()
hash.update(b'admin')
print(hash.hexdigest()) # d033e22ae348aeb5660fc2140aec35850c4da997 # SHA256
hash = hashlib.sha256()
hash.update(b'admin')
print(hash.hexdigest()) # 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 # SHA384
hash = hashlib.sha384()
hash.update(b'admin')
print(hash.hexdigest()) # 9ca694a90285c034432c9550421b7b9dbd5c0f4b6673f05f6dbce58052ba20e4248041956ee8c9a2ec9f10290cdc0782 # SHA512
hash = hashlib.sha512()
hash.update(b'admin')
print(hash.hexdigest()) # c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec
shelve和hashlib模块的更多相关文章
- python 全栈开发,Day25(复习,序列化模块json,pickle,shelve,hashlib模块)
一.复习 反射 必须会 必须能看懂 必须知道在哪儿用 hasattr getattr setattr delattr内置方法 必须能看懂 能用尽量用__len__ len(obj)的结果依赖于obj. ...
- python笔记-7(shutil/json/pickle/shelve/xml/configparser/hashlib模块)
一.shutil模块--高级的文件.文件夹.压缩包处理模块 1.通过句柄复制内容 shutil.copyfileobj(f1,f2)对文件的复制(通过句柄fdst/fsrc复制文件内容) 源码: Le ...
- python 闭包,装饰器,random,os,sys,shutil,shelve,ConfigParser,hashlib模块
闭包 def make_arerage(): l1 = [] def average(price): l1.append(price) total = sum(l1) return total/len ...
- 4-20模块 序列化模块 hashlib模块
1,模块,py文件就是模块,py之所以好用就是模块多. 2,模块的分类: 1,内置模块,python 安装时自带的模块 2,扩展模块,别人写好的,需要安装之后,可以直接使用.itchat微信模块, b ...
- python 无序模块,hashlib模块
无序模块什么是无序模块,将字符串转化为十六进制的字符串类型,主要运用在网络编程中.1,json模块 1,用于网络传输,跨语言,可用的类型有 int str 列表-->元祖会变为列表 字典--&g ...
- Python进阶(九)----json模块, pickle模块, os模块,sys模块,hashlib模块
Python进阶----json模块, pickle模块, os模块,sys模块,hashlib模块 一丶序列化模块 什么是序列化: 将一种数据结构,转换成一个特殊的序列(特殊字符串,用于网络传输 ...
- python标准模块(time、datetime及hashlib模块)
一.time,datetime模块 时间相关的操作 import time time.sleep(5) # ==> 停顿多少秒 print(time.time()) # ==> 返回时间戳 ...
- Python hashlib模块 (主要记录md5加密)
python提供了一个进行hash加密的模块:hashlib 下面主要记录下其中的md5加密方式(sha1加密一样把MD5换成sha1) >>> import hashlib > ...
- Python学习笔记——基础篇【第六周】——json & pickle & shelve & xml处理模块
json & pickle 模块(序列化) json和pickle都是序列化内存数据到文件 json和pickle的区别是: json是所有语言通用的,但是只能序列化最基本的数据类型(字符串. ...
随机推荐
- Agilent RF fundamentals (10) Mixer ,Phase domain and modulator
1 Mixer characterization DC input Bias voltage Bias Current RF input Lo input IF output 2 mixer devi ...
- Redis补充
Redis补充 (1)redis基本概念 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set ...
- tomcat8启动慢原因及解决办法
tomcat8在linux下安装使用一段时间后启动非常慢,6分钟左右. 原因是一个随机数生成参数导致的. 处理如下: 修改catalina.sh .配置JRE使用非阻塞的Entropy Source ...
- eclipse javaw.exe in your current path问题
问题: 第一次运行eclipse的时候,可能会提醒找不到javaw.exe ******等的问题 很坑的! 解决方案: 无法启动Eclipe,因找不到javaw.exe 还是环境变量的问题!!! 注意 ...
- bzoj 2131 免费的馅饼
Written with StackEdit. Description Input 第一行是用空格隔开的二个正整数,分别给出了舞台的宽度\(W\)(\(1\)到\(10^8\)之间)和馅饼的个数\(n ...
- EMQ (Erlang/Enterprise/Elastic MQTT Broker)
EMQ (Erlang/Enterprise/Elastic MQTT Broker) https://www.cnblogs.com/SteveLee/p/9843215.html MQ介绍 EMQ ...
- opencv 学习笔记集锦
整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...
- CentOS系统内核、操作系统位数以及系统参数查看
2016-07-29 一.系统内核的查看方法 1.uname -a 显示详细的内核信息 Linux localhost.localdomain 3.10.0-229.el7.x86_64 #1 SMP ...
- 重温CLR(四)基元类型、引用类型、值类型
编程语言的基元类型 编译器直接支持的数据类型称为基元类型(primitive type).基元类型直接映射到framework类型(fcl)中存在的类型. 下表列出fcl类型 从另一个角度,可以认为C ...
- Xcode7 修改项目名完全攻略
1.先把整个工程文件夹名改为新的工程名. 2 .将旧项目文件夹和Tests文件名夹修改为新的名称,修改后如下图所示 3.右击 ,选择“show content package”(中文:显示包内容),看 ...