• python 反射


     1. 反射

    实例:伪造web框架中的路由系统

    利用反射导入模块
    obj = __import__('commons')
    obj = __import__('lib.' + 'commons',fromlist = True)
    导入模块不在当前目录下,需要设置fromlist参数为真, 才能拼接模块路径

    利用反射操作对象成员(属性)
    通过传入字符串,操作(检查/获取/删除/设置)对象成员(属性)
    hasattr(对象名,字符串),如果对象中存在名为字符串的属性(成员),返回True,否则返回False
    getattr(对象名,字符串),如果对象中存在名为字符串的属性(成员),返回该属性(成员),否则报错
    delattr(对象名,字符串),删除对象中名为字符串的属性(成员)
    setattr(对象名,字符串),设置对象中名为字符串的属性(成员)

    2. __builtins__里面的常量
    __doc__ 文件中的注释
    __cached__ 字节码文件(pyc文件)的缓存路径
    __package__ 返回被导入模块所在的包名
    __file__ 当前py文件的完整路径
    __name__ 只有执行当前py文件时,其__name__才等于__main__
    因此,一般只在主文件中,才写这样的语句:
    if __name == '__main__':
    run()

    3. 密码加密,使用hashlib模块
    示例:
    import hashlib
    
    password = input('password:')
    obj = hashlib.md5()    #生成md5对象
    obj.update(bytes(password,encoding='utf-8'))    #更新md5对象,存入加密密码
    result = obj.hexdigest()     # 对象的十六进制方法
    print(result)

    增强版示例:

    以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。

    import hashlib
     
    hash = hashlib.md5('898oaFs09f')
    hash.update('admin')
    print hash.hexdigest()

    还不够吊?python 还有一个 hmac 模块,它内部对我们创建 key 和 内容 再进行处理然后再加密

    import hmac
    h = hmac.new('wueiqi')
    h.update('hellowo')
    print h.hexdigest()

    4. 比较print 与 sys.stdout.write

    print底层调用了sys.stdout.write,默认会换行,sys.stdout.write默认不换行

    进度条示例:

    import sys

    def
    view_bar(num,total): rate = num /total rate_num = int(rate * 100) r = ' {0}>{1}%'.format('='*num,rate_num) sys.stdout.write(r) #sys.stdout.flush() # windows平台下不需要此行 if __name__ == '__main__': run() for num in range(1,101): time.sleep(0.1) view_bar(num,100)
     
  • 相关阅读:
    Ubuntu18.04 更新gcc和g++的版本号
    mkimage uboot
    ubuntu终端进入secure boot 修改为disable
    apt install g++8riscv64linuxgnu
    计算机专用英语词汇1702个词汇表
    快收藏!高手Linux运维管理必备工具大全,你会吗?
    Cilium 架构设计与概念解析
    prometheus添加集群
    openkruise详解
    Windows11安装Ubantu 18.04 LTS
  • 原文地址:https://www.cnblogs.com/huamingao/p/6011801.html
Copyright © 2020-2023  润新知