常用模块和面向对象 类

hashhlib 模块
什么叫hash:hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值
2,hash的特征
(1)只要传人的内容一样,得到的1hash值一样=====》要用明文传输密码文件完整性校验
(2)不能由hash值反解成内容====》把密码做成hash值,不应该在网络传输明文密码
(3)只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的
 import hashlib
 
m=hashlib.md5()# m=hashlib.sha256()
 
 m.update('hello'.encode('utf8'))
 print(m.hexdigest())  #5d41402abc4b2a76b9719d911017c592
 
 m.update('alvin'.encode('utf8'))
 
 print(m.hexdigest())  #92a7e713c30abbb0319fa07da2a5c4af
 
 m2=hashlib.md5()
 m2.update('helloalvin'.encode('utf8'))
 print(m2.hexdigest()) #92a7e713c30abbb0319fa07da2a5c4af
 
 '''
 注意:把一段很长的数据update多次,与一次update这段长数据,得到的结果一样
 但是update多次为校验大文件提供了可能。
 '''

上面算法虽然很联合,但是存在缺陷,通过撞库可以反解
import hashlib
所以我们要密码加盐来提高安全性
m=hashlib.md5()
m.update(‘天王盖地虎’.encode(‘utf-8’))
m.update(pwd.encode('utf-8'))
m.update('gdhgfhjhdj'.encode('utf-8'))
print('m.hexdigest()')

import hashlib
passwds=[
    'alex3714',
    'alex1313',
    'alex94139413',
    'alex123456',
    '123456alex',
    'a123lex',
    ]
def make_passwd_dic(passwds):
    dic={}
    for passwd in passwds:
        m=hashlib.md5()
        m.update(passwd.encode('utf-8'))
        dic[passwd]=m.hexdigest()
    return dic

def break_code(cryptograph,passwd_dic):
    for k,v in passwd_dic.items():
        if v == cryptograph:
            print('密码是===>33[46m%s33[0m' %k)

cryptograph='aee949757a2e698417463d47acac93df'
break_code(cryptograph,make_passwd_dic(passwds))

 
python 还有一个 hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密:
1 import hmac
2 h = hmac.new('alvin'.encode('utf8'))
3 h.update('hello'.encode('utf8'))
4 print (h.hexdigest())#320df9832eab4c038b6c1d7ed73a5940
 

#要想保证hmac最终结果一致,必须保证:
#1:hmac.new括号内指定的初始key一样
#2:无论update多少次,校验的内容累加到一起是一样的内容

import hmac

h1=hmac.new(b'egon')
h1.update(b'hello')
h1.update(b'world')
print(h1.hexdigest())

h2=hmac.new(b'egon')
h2.update(b'helloworld')
print(h2.hexdigest())

h3=hmac.new(b'egonhelloworld')
print(h3.hexdigest())

'''
f1bf38d054691688f89dcd34ac3c27f2
f1bf38d054691688f89dcd34ac3c27f2
bcca84edd9eeb86f30539922b28f3981
'''


suproess模块(系统命令)
主要常用的三个
task list | findstr(过例找到)python
taskkill/?
python.exe (查看)12360 console
D:code>taskkill /f/PID 12360 强制

configparser模块
(解析)


[section1] k1 = v1 k2:v2 user=egon age=18 is_admin=true salary=31
[section2] k1 = v1

读取

import configparser config=configparser.ConfigParser()
config.read('a.cfg')
#查看所有的标题 res=config.sections() #['section1', 'section2'] print(res)
#查看标题section1下所有key=value的key options=config.options('section1')
print(options) #['k1', 'k2', 'user', 'age', 'is_admin', 'salary']

面向对象

面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,
即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式。

类与对象

类即类别、种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,
而类则是一系列对象相似的特征与技能的结合体

那么问题来了,先有的一个个具体存在的对象(比如一个具体存在的人),
还是先有的人类这个概念,这个问题需要分两种情况去看

在现实世界中:先有对象,再有类

对象1:李坦克
    特征:
        学校=oldboy
        姓名=李坦克
        性别=男
        年龄=18
    技能:
        学习
        吃饭
        睡觉

对象2:王大炮
    特征:
        学校=oldboy
        姓名=王大炮
        性别=女
        年龄=38
    技能:
        学习
        吃饭
        睡觉


现实中的老男孩学生类 相似的特征: 学校=oldboy 相似的技能: 学习 吃饭 睡觉


在程序中,务必保证,先定义类,后使用
class OldboyStudent:
school='oldboy'
 def learn(self):
 print('is learning')
 def eat(self):
 print('is eating')
 def sleep(self):
 print('is sleeping')


#注意: 1.类中可以有任意python代码,这些代码在类定义阶段便会执行
2.因而会产生新的名称空间,用来存放类的变量名与函数名,
可以通过OldboyStudent.__dict__查看
3.对于经典类来说我们可以通过该字典操作类名称空间的名字(新式类有限制),但
python为我们提供专门的.语法 4.点是访问属性的语法,类中定义的名字,都是类的属性 #程序中类的用法 .:
专门用来访问属性,本质操作的就是__dict__ OldboyStudent.school
#等于经典类的操作OldboyStudent.__dict__['school'] OldboyStudent.school='Oldboy'
 #等于经典类的操作OldboyStudent.__dict__['school']='Oldboy' OldboyStudent.x=1
#等于经典类的操作OldboyStudent.__dict__['x']=1 del OldboyStudent.x #等于经典类的操作OldboyStudent.__dict__.pop('x')
 #程序中的对象 #调用类,或称为实例化,
得到对象 s1=OldboyStudent() s2=OldboyStudent() s3=OldboyStudent()
#如此,s1、s2、s3都一样了,而这三者除了相似的属性之外还各种不同的属性,
这就用到了__init__ #注意:该方法是在对象产生之后才会执行,只用来为对象进行初始化操作,
可以有任意代码,但一定不能有返回值 class OldboyStudent: ...... def __init__(self,name,age,sex):
 self.name=name self.age=age self.sex=sex ......
s1=OldboyStudent('李坦克','男',18) #先调用类产生空对象s1,
然后调用OldboyStudent.__init__(s1,'李坦克','男',18)
s2=OldboyStudent('王大炮','女',38)
s3=OldboyStudent('牛榴弹','男',78) #程序中对象的用法 #执行__init__,s1.name='牛榴弹',
很明显也会产生对象的名称空间
s2.__dict__ {'name': '王大炮', 'age': '女', 'sex': 38}
 s2.name #s2.__dict__['name'] s2.name='王三炮' #s2.__dict__['name']='王三炮'
 s2.course='python' #s2.__dict__['course']='python' del s2.course #s2.__dict__.pop('course')

原文地址:https://www.cnblogs.com/maojiang/p/8784616.html