2020/2/15-Python学习计划

Python常用内建模块(二)

hashlib

要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。

摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

import hashlib

md5 = hashlib.md5()
md5.update(‘how to use md5 in python hashlib?‘.encode(‘utf-8‘))
print(md5.hexdigest())

  

如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的。

由于常用口令的MD5值很容易被计算出来,所以,要确保存储的用户口令不是那些已经被计算出来的常用口令的MD5,这一方法通过对原始口令加一个复杂字符串来实现,俗称“加盐”。

经过Salt处理的MD5口令,只要Salt不被黑客知道,即使用户输入简单口令,也很难通过MD5反推明文口令。

但是如果有两个用户都使用了相同的简单口令比如123456,在数据库中,将存储两条相同的MD5值,这说明这两个用户的口令是一样的。有没有办法让使用相同口令的用户存储不同的MD5呢?

如果假定用户无法修改登录名,就可以通过把登录名作为Salt的一部分来计算MD5,从而实现相同口令的用户也存储不同的MD5。

hmac

通过哈希算法,我们可以验证一段数据是否有效,方法就是对比该数据的哈希值,例如,判断用户口令是否正确,我们用保存在数据库中的password_md5对比计算md5(password)的结果,如果一致,用户输入的口令就是正确的。

为了防止黑客通过彩虹表根据哈希值反推原始口令,在计算哈希的时候,不能仅针对原始输入计算,需要增加一个salt来使得相同的输入也能得到不同的哈希,这样,大大增加了黑客破解的难度。

如果salt是我们自己随机生成的,通常我们计算MD5时采用md5(message + salt)。但实际上,把salt看做一个“口令”,加salt的哈希就是:计算一段message的哈希时,根据不通口令计算出不同的哈希。要验证哈希值,必须同时提供正确的口令。

这实际上就是Hmac算法:Keyed-Hashing for Message Authentication。它通过一个标准算法,在计算哈希的过程中,把key混入计算过程中。

和我们自定义的加salt算法不同,Hmac算法针对所有哈希算法都通用,无论是MD5还是SHA-1。采用Hmac替代我们自己的salt算法,可以使程序算法更标准化,也更安全。

itertools

chain()

chain()可以把一组迭代对象串联起来,形成一个更大的迭代器。

groupby()

groupby()把迭代器中相邻的重复元素挑出来放在一起。

contextlib

在Python中,读写文件这样的资源要特别注意,必须在使用完毕后正确关闭它们。正确关闭文件资源的一个方法是使用try...finally。

try:
    f = open(‘/path/to/file‘, ‘r‘)
    f.read()
finally:
    if f:
        f.close()

  

try...finally非常繁琐。Python的with语句允许我们非常方便地使用资源,而不必担心资源没有关闭,所以上面的代码可以简化为

with open(‘/path/to/file‘, ‘r‘) as f:
    f.read()

  

urllib

Get

urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应。

Post

如果要以POST发送一个请求,只需要把参数data以bytes形式传入。

Handler

如果还需要更复杂的控制,比如通过一个Proxy去访问网站,我们需要利用ProxyHandler来处理。

urllib提供的功能就是利用程序去执行各种HTTP请求。如果要模拟浏览器完成特定功能,需要把请求伪装成浏览器。伪装的方法是先监控浏览器发出的请求,再根据浏览器的请求头来伪装,User-Agent头就是用来标识浏览器的。

原文地址:https://www.cnblogs.com/fuheishi/p/12310857.html

时间: 2024-10-14 21:02:44

2020/2/15-Python学习计划的相关文章

Python 学习计划

时间分为4周,全部自学,仅提供大纲.适用于Web方向: 1.Week1:读完<简明Python教程>,适应Python开发环境 2.Week2:写个爬虫,需要深入了解re.urllib2.sqlite3.threading,Queue等几个模块.需要用上多线程抓取,正则表达式分析,并发资源控制,重新开启程序自动继续抓取和分析 3.Week3:学习一种Web开发框架,推荐Flask.webpy之类的,学个数据库接口如sqlite3,写个简单的web应用如博客 4.Week4:给产品做个小功能并走

python、数据分析师、算法工程师的学习计划

1.前言 最近(2018.4.1)在百忙之中开通了博客,就喜欢能够把自己所学所想沉淀下来,这篇是我开始系统学习python,称为数据分析师和算法工程师之路的计划,望有志于为同样目标奋斗的数据猿一起交流和学习. 2.Python学习计划 2.1 学习计划 (1)找一本浅显易懂,例程比较好的教程,从头到尾看下去.不要看很多本,专注于一本. (2)去找一个实际项目练手.(参照Crossin的编程教室-Python入门,Python的练手项目) 2.2 学习资料 零基础入门书籍:<简明python教程>

Python学习步骤如何安排?

一.清楚学习目标 无论是学习什么知识,都要有一个对学习目标的清楚认识. 只有这样才能朝着目标持续前进,少走弯路,从学习中得到不断的提升,享受python学习计划的过程. 二.基本python 知识学习 1.  了解Python是什么,都能做些什么? 2.  知道什么是变量.算法.解释器 3.  Python基本数据类型 4.  列表和元组的操作方法 5.  字符串操作方法 6.  基本的字典操作方法 以上这些可以略微掌握之后就进行下一步,遇到忘记不会的可以再参考一下书和笔记. 三.掌握Pytho

Python学习15:Open读取文件

在之前我已经学习过raw_input和argv了,在这一节的Python学习中,我学习怎样使用脚本打开普通的文本文件,读取它并且关闭文件.关闭文件很重要,关闭是为了释放资源,防止内存被耗尽,导致机器死锁.另外,关闭文件还有一个作用,当写文件时,关闭后将缓冲区中的内容写入文件本身. 下面是一个简单的读取文本文件的脚本.我们可以用两种方式来实现这个功能:第一种是一个带参数的脚本.第二种是不使用参数,直接使用变量来读取文件的脚本. 第一种: 1. # 导入argv模块 2. from sys impo

最全Python学习路线图【2020最新版】

2020年最新的python学习大纲,专为python高薪打造另外很多人在学习Python的过程中,往往因为没有好的教程或者没人指导从而导致自己容易放弃,为此我建了个Python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题多跟里面的人交流,都会解决哦! 原文地址:https://www.cnblogs.com/chengxuyuanaa/p/12114751.html

Python学习路线引导-Python入门基础

一.学习目标和建议学习周期 1.学习目标:完成Python入门基础,为数据分析事或者软件测试工程师知识体系中Python编程的入门知识. 2.学习阶段:2020.1.13-2020.2.23六周,建议每周学习时长15小时,整个学习时长90小时. 二.推荐教程 廖雪峰教程:https://www.liaoxuefeng.com/wiki/1016959663602400 学习笔记:<Python入门学习笔记-精灵>-部分示例代码源自廖雪峰教程,可参照其教程,理解其知识点,在数据分析与软件测试创新

Python学习教程_Python学习路线:Python3里你不知道的秘密特性

Python学习教程_Python学习路线:Python3里你不知道的秘密特性 概述 到2020年,Python2的官方维护期就要结束了,越来越多的Python项目从Python2切换到了Python3.其实在实际工作中,很多伙伴都还是在用Python2的思维写Python3的代码.给大家总结一下Python3一些新的更方便的特性!希望你们看完后也能高效率的编写代码 f-strings (3.6+) 在Python里面,我们经常使用format函数来格式化字符串,例如: user = "Jane

QBXT学习计划

众所周知,清北学堂是一个认真摸鱼学习的地方 时间:2020.1.15 地点:中国海洋大学 行程: 整体还比较顺利,就是CYC下火车之后非要做地铁,于是带着YRQ走了3公里...(YRQ爷我错了) 内容: 学习目标 1.认真听讲 啊现在在高中部也学习了一段时间了,清北学堂的课程强度应该也能适应.怎么说呢,初三了,不能再和之前一样摸鱼玩游戏了,好好学习才是重要的. 2.整理笔记 尽量整理笔记,如果整理好笔记就可以发好看的博客啦!!! 3.尽量预习 每天看看第二天讲什么,尽力提前学习一下,要不然可能真

《Python学习手册 第五版》 -第11章 赋值、表达式和打印

上一章对Python的语句和语法已经进行了基本的说明,接下来就是每个章节的详细说明,本章的主要内容就是标题中涵盖的三点:赋值语句.表达式语句.打印语句 本章重点内容如下: 1.赋值语句 1)赋值语句的特点(注意事项) 2)赋值语句的形式:基本形式.元组及列表解包赋值.序列赋值.扩展的序列解包.多目标赋值.增量赋值 3)变量命名规则 2.表达式语句 1)常见的表达式语句 2)表达式语句和原位置修改 3.打印操作 1)调用形式 2)应用示例 以下是针对以上重点内容的详细说明 1.赋值语句 1)赋值语

《Python学习手册 第五版》 -第12章 if测试和语法规则

本章节的内容,主要讲解if语句,if语句是三大复合语句之一(其他两个是while和for),能处理编程中大多数逻辑运算 本章的重点内容如下: 1.if语句的基本形式(多路分支) 2.布尔表达式 3.if三元表达式 以下是针对重点内容的详细说明 1.if语句的基本形式 if语句是根据测试结果,从一些备选的操作中做出选择的语句,也就是说要先计算测试结果,再选择做什么,基本形式如下: if test1: statements1 elif test2: statements2 else: stateme