zoukankan      html  css  js  c++  java
  • 4.10

    hashlib模块

    什么是hash?

    一种算法,接收传入的内容,经过运算得到的hash值

    特点:只要传入的内容一样,得到的hash值必然一样---->文件完整性效验

          不能由hash值返解成内容---->把密码做成hash值,不要用明文传输密码

          只要使用的hash算法不变,无论效验的内容有多大,得到的hash长度不变

    import hashlib
    
    m=hashlib.md5()
    m.update('hello'.encode('utf-8'))
    m.update('world'.encode('utf-8'))
    m.update('egon'.encode('utf-8'))
    print(m.hexdigest()) #3801fab9b8c8d9fcb481017969843ed5

    不同的算法 hash值的长度不同

    import hashlib
    
    m=hashlib.md5()
    m.update('helloworld'.encode('utf-8'))
    print(m.hexdigest()) #fc5e038d38a57032085441e7fe7010b0
    
    m=hashlib.sha256()
    m.update('helloworld'.encode('utf-8'))
    print(m.hexdigest()) #936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af
    
    
    m=hashlib.sha512()
    m.update('helloworld'.encode('utf-8'))
    print(m.hexdigest()) #1594244d52f2d8c12b142bb61f47bc2eaf503d6d9ca8480cae9fcf112f66e4967dc5e8fa98285e36db8af1b8ffa8b84cb15e0fbcf836c3deb803c13f37659a60

    密码加盐

    密码加盐
    import hashlib
    pwd='alex3714'
    
    m=hashlib.md5()
    m.update('一行白鹭上青天')
    m.update(pwd.encode('utf-8'))
    m.update(''.encode('utf-8'))
    
    m.update('小雨一米五'.encode('utf-8'))
    print(m.hexdigest())
    subprocess模块
    没学subprocess模块之前我们用os.system来执行命令 不过os.system所执行的命令直接打印到屏幕上
    import os
    while True:
        cmd=input(">>:").strip()
        if not cmd:continue
        os.system(cmd)
    使用subprocess模块
    import subprocess
    ojb=subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    res=ojb.stdout.read()
    print(res.decode('gbk'))

    只能取一次,取走了就没了

    面向对象

    核心‘对象’二字,对象指的是特征和技能的结合体

    基于该思想编写程序就好比在创造一个世界,你就是这个世界的上帝,是一种上帝式的思维方式

    优点:可扩展性强

    缺点:编程的复杂度高于面向编程

    类:对象式特征与技能的结合体,那类就是一系列对象相同的技能和特征的结合体

    在现实世界中,一定先有对象,后来随着人类文明的发展总结出的类

    对象是具体存在的,而类只是一种抽象的概念

    在程序中,务必保证先定义类 然后调用类产生的对象

    #1、程序中的类
    class OldboyStudent:
        # 用变量表示特征
        school="Oldboy"
    
        #  用函数表示技能
        def learn(self):
            print('is learning...')
    
        def choose(self):
            print('choose course...')

    注意:在定义类的阶段会立刻执行类体内的代码,然后将产生的名字存放于类的名称空间

    查看名称空间的内容

    我们之前学的一种

    OldboyStudent.__dict__[key]

    今天我们学的

    用OldboyStudent加点,加key直接调用

    OldboyStudent.key

     
  • 相关阅读:
    Mysql 批量插入数据的方法
    sql server 多行合并一行
    跨服务器多库多表查询
    OPENQUERY用法以及使用需要注意的地方
    C# 判断操作系统的位数
    rpc介绍
    JavaScript decodeURI()与decodeURIComponent() 使用与区别
    UNIX 时间戳 C#
    C# winform javascript 互调用
    oracle 实例名和服务名以及数据库名区别
  • 原文地址:https://www.cnblogs.com/yftzw/p/8779175.html
Copyright © 2011-2022 走看看