zoukankan      html  css  js  c++  java
  • 常用模块和面向对象 类

    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')

  • 相关阅读:
    前人风采
    【C++ Primer 第16章】1. 定义模板 (一)
    CCF CSP认证考试试题
    【C++ Primer 第11章】4. 无序容器
    【C++ Primer 第11章 练习答案】2. 关联容器操作
    【C++ Primer 第11章】2. 关联容器操作
    dxRatingControl使用
    dxRangeTrackBar使用教程
    UniConnectDialog使用
    Delphi窗体置顶及失去焦点后取得焦点
  • 原文地址:https://www.cnblogs.com/maojiang/p/8784616.html
Copyright © 2011-2022 走看看