(2)hashlib模块(加密算法模块)
hash算法模块内有很多种,如md5、sha1等,只是加密的程度不一样
hash是一种算法
该算法接收传入的文本内容,经过hash运算得到一串hash值
hash值具备三个特点:
1. 如果传入的内容相同,得到hash一定相同
2. 不能根据hash值反推出内容(无法反解,但是目前已被破解)
3. 如果采用hash算法固定,那么hash值的长度也是固定的,即不会随着内容的增多而变长
结合1+3===>文件完整性校验(网络传输中有可能应为网络问题丢失部分数据)
PS:如何做呢,用hash算法将文件生成一个hash值,用户下载后也hash一次得到的值对比一样就是完整的(服务端用什么hash算法,客户端也要用相同算法)
结合1+2===>传输密文密码(传输过程中避免被黑客抓包盗取账户)
PS:如何做呢,用户在客户端注册账户密码时候会生成一个hash值,然后存入服务端,以后用户登录只要输入账号密码就会生成hash值,然后匹配服务端的hash即可
hashlib模块实例
import hashlib
m=hashlib.md5() #定义hashlib的加密算法种类
m.update('你好啊'.encode('utf-8')) m.update('hello'.encode('utf-8'))
print(res) #36b20ffdd2e10c6feef8ca866f2ef3b2
print(len(res)) #36b20ffdd2e10c6feef8ca866f2ef3b2 #算法固定长度固定,即不同的算法长度一不一样
PS:update可以多次传入值(一次hash动作,不管传入多少只,得到的hash值只有一个)
PS:传入的内容相同即得到的hash值也肯定相同
PS:用update方法将值传入,但是必须传入bytes类型,而且用encode编码定义成指定编码格式(图片等任何转成二进制类型都可传入)
如果传入的内容相同,得到hash一定相同
m.update('你'.encode('utf-8'))
m.update('好啊h'.encode('utf-8'))
m.update('ello'.encode('utf-8'))
res=m.hexdigest()
print(res) #36b20ffdd2e10c6feef8ca866f2ef3b2
print(len(res)) #36b20ffdd2e10c6feef8ca866f2ef3b2
PS:不管原值如何拆分传入,得到的hash值依旧一样不会变,所以只要原值不变,hash一定不会变
PS:hexdigest()这个方法就是用来得到hash值
密码校验(加盐操作,防止撞库破解)
pwd=input('>>>: ').strip()
m=hashlib.md5()
m.update('天王盖地虎'.encode('utf-8')) #这个位置就是加盐操作
m.update(pwd.encode('utf-8')) #这个位置是用户输入内容
m.update('小鸡炖蘑菇'.encode('utf-8')) #这个位置就是加盐操作
print(m.hexdigest()) #hexdigest得到hash值
文件完整性校验
m=hashlib.md5()
with open('f.txt',mode='rb') as f:
for line in f: #读取文件用for循环,减小内存压力
f.seek(100,0) #光标用seek从头开始往后移动100个字节
x = f.read(5) #读取光标位置后5个字节的内容
m.update(x)
hash_v=m.hexdigest()
print(hash_v) #一行行读加起来得到的hash值就是一样的
PS:文件过大,for循环时间会很长,为了减少读取时间,可以自己划分文件比例,有多少字节划分好,然后取几个点进行匹配就行
(2)hashlib模块(加密算法模块)的更多相关文章
- 【python网络编程】使用rsa加密算法模块模拟登录新浪微博
一.基础知识 http://blog.csdn.net/pi9nc/article/details/9734437 二.模拟登录 因为上学期参加了一个大数据比赛,需要抓取数据,所以就想着写个爬虫抓取新 ...
- hashlib模块configparser模块logging模块
hashlib模块 算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长 ...
- python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则
python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess ...
- Py修行路 python基础 (二十)模块 time模块,random模块,hashlib模块,OS及sys模块
一.前提介绍: 可以开辟作用域的只有类,函数,和模块 for循环 if,else: 不能开辟自己的作用域 避免程序复用和重复调用,将这些写到一个.py文件中,做成一个模块,进行调 ...
- logging、hashlib、collections模块
一.hashlib模块(加密模块) 1.什么叫hash:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 , ...
- day13 函数模块之序列化 random 模块 os模块 sys模块 hashlib模块 collections模块
json import json dic = {'k1':'v1','k2':'v2','k3':'v3'} str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串 ...
- hashlib模块&日志模块
内容概要 hashlib模块 logging模块 第三方模块下载 内容详细 hashlib模块 hashlib 是一个提供了一些流行的hash(摘要)算法的Python标准库.其中所包括的算法有 md ...
- Python(文件、文件夹压缩处理模块,shelve持久化模块,xml处理模块、ConfigParser文档配置模块、hashlib加密模块,subprocess系统交互模块 log模块)
OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目 ...
- s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译
时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...
随机推荐
- C#中一个简单的匹配16进制颜色的正则测试
using System; using System.Text.RegularExpressions; namespace Test { class Program { //匹配16进制颜色代码的正则 ...
- 文件路径、File协议、FTP协议、Http协议之间简单的区别
File协议主要用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件一样,基本的格式如下:file:///文件路径. FTP是文件传输协议,可以用于互联网上.例如,你有一个网站,放在 ...
- 个人学期总结及Python+Flask+MysqL的web建设技术过程
一个学期即将过去,我们也迎来了2018年.这个学期,首次接触了web网站开发建设,不仅是这门课程,还有另外一门用idea的gradle框架来制作网页. 很显然,用python语言的flask框架更加简 ...
- English trip M1 - PC12 I'd Like a Room Please Teacher:Taalan
In this lesson you will learn to say what you need. 在本课中,您将学习如何说出您的需求. Words list elevator 电梯 ...
- (GoRails) 自动侦测用户的时区,使用javascript 的jszt库。
传统方法见:http://www.cnblogs.com/chentianwei/p/9369904.html ⚠️: 两个方法最后都要有controller中的类似before_action :se ...
- 1月10日 ruby基础教程,查漏补缺; 2月22日 Exception补充
https://ruby-doc.org/core-2.5.0/Exception.html 1月20日练习完1,2章. 第一章 初探 ‘’单引号不执行转义符. \t 制表符.\n 换行符. p me ...
- codeforces 555c// Case of Chocolate// Codeforces Round #310(Div. 1)
题意:直角边为n的网格巧克力,一格为一块,选择斜边上一点,从左或上吃,直到吃到空气,称为一次操作.给出几个操作,问各能吃几块.如果x是当前要吃的横坐标,在已经吃过的中找x1>=x的第一个x1,即 ...
- python-day46--前端基础之html
一.html是什么? 超文本标记语言(Hypertext Markup Language,HTML)通过标签语言来标记要显示的网页中的各个部分.一套规则,浏览器认识的规则 浏览器按顺序渲染网页文件,然 ...
- python-day39--数据库
1.什么是数据:描述事物的特征,提取对自己有用的信息 称之为数据 2..什么是数据库: 数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的 为什么要用数据库: ...
- python 使用yield进行数据的流式处理
demo:从文件中取包含字符“a”的5行数据做一次批处理!!! # coding: utf-8 import time def cat(f): for line in f: yield line de ...