模块

hashlib  模块

hashlib模块可用于对密码的加密破解有撞库暴力破解,

在进行动态加盐后撞库的可能性就基本没有了。

# import hashlib#打开模块
# m = hashlib.md5()#创建了一个md5算法的对象
# m.update('123456'.encode('utf-8'))
# print(m.hexdigest())#在pycharm中hexdigest没提示
#输出结果e10adc3949ba59abbe56e057f20f883e
#加密后的字符串永远不会变
# 加盐
# m = hashlib.md5(b'bilibili')#创建一个MD5的对象
# m.update('123456'.encode('utf-8'))
# print(m.hexdigest())
# 输出结果500785fe24e0dec0e5a981a8597085b2
# 动态加盐
#以自己的用户名加盐
# user = b'bilibili'
# m = hashlib.md5(user[::-1]) # 创建了一个md5算法的对象
# m.update('123456'.encode('utf-8'))
# print(m.hexdigest())
密码加密

 

文件的一致性   

在网络传输时文件的一致性必须保证否则就会出大问题。

利用hashlib查看是就算有一个字符的不一样也会让最后的结果不一样

# 文件的一致性
# md5obj = hashlib.md5()
# md5obj.update(b'wahaha,heng,haohao')
# md5obj.update(b'wahaha,')
# md5obj.update(b'heng,')
# md5obj.update(b'haohao')
# print(md5obj.hexdigest())
# 4194deb809d4862a84309984330ecac0
# 4194deb809d4862a84309984330ecac0
# 一段字符串直接进行摘要和分成几段摘要的结果是相同的
# import hashlib
# def check(filename):#定义一个函数
#     md5obj=hashlib.md5
#     with open(filename,'rb')as  f:
#         while True:#循环读取  每次1024字节
#
#             content = f.read(1024)
#             if content:
#                 md5obj.update(content)
#             else:
#                 break
#     return md5obj.hexdigest()#返回加密后的密文
# ret1=check('king1')
# ret2=check('king2')#导入两个文件
# print(ret1)
# print(ret2)#对比
View Code
序列化  把数据类型变成字符串
为什么要有序列化 因为在网络上和文件中能存在的只有字节
json 在所有语言中通用 只对有限的数据类型进行序列化 字典 列表 字符串 数字 元组
在多次写入dump数据进入文件的时候,不能通过load来取。
pickle 只能在python中使用 对绝大多数数据类型都可以进行序列化
在load的时候,必须拥有被load数据类型对应的类在内存里
dumps 序列化
loads 反序列化
dump 直接向文件中序列化
load 直接对文件反序列化
shelve
模块configparser

操作configparser模块与操作字典类似
# import configparser
# config = configparser.ConfigParser()
# config.read('example.ini')
# print(config.sections())        #  .sections()查看所有的节 但是默认不显示DEFAULT []
# print('bitbucket.org' in config) # True  in config验证某个节是否在文件中
# print('bytebong.com' in config) # False
# print(config['bitbucket.org']["user"])  # hg 查看某节下面的某个配置项的值
# print(config['DEFAULT']['Compression']) #yes
# print(config['topsecret.server.com']['ForwardX11'])  #no
# print(config['bitbucket.org'])          #<Section: bitbucket.org>
# for key in config['bitbucket.org']:     # 注意,有default会默认default的键
#     print(key)
# print(config.options('bitbucket.org'))  # 同for循环,找到'bitbucket.org'下所有键
# print(config.items('bitbucket.org'))    #找到'bitbucket.org'下所有键值对
# print(config.get('bitbucket.org','compression')) # yes       get方法Section下的key对应的value

特殊的增加与删除

#添加与删除
import configparser

# config = configparser.ConfigParser()
# config.read('example.ini')
# config.add_section('yuan')#新建分支
# config.remove_section('bitbucket.org')#删除分支
# config.remove_option('topsecret.server.com',"forwardx11")#删除分支下的属性
# config.set('topsecret.server.com','k1','11111')#给分支添加属性
# config.set('yuan','k2','22222')
# config.write(open('new2.ini', "w"))

 

 
 
logging模块
 logging模块 不会自动帮你添加日志的内容
 
 
# logging
# 简单配置
# 配置logger对象

# 简单配置
# import logging
# # 默认情况下 只显示 警告 及警告级别以上信息
# logging.basicConfig(level=logging.DEBUG,
#                     format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
#                     datefmt='%a, %d %b %y %H:%M:%S',#时间格式
#                     # filename = 'userinfo.log'#已文件的形式文件,注掉后已屏幕显示
#                     )
# logging.debug('debug message')       # debug 调试模式 级别最低
# logging.info('info message')         # info  显示正常信息
# logging.warning('warning message')   # warning 显示警告信息
# logging.error('error message')       # error 显示错误信息
# logging.critical('critical message') # critical 显示严重错误信息
# 编码格式不能设置
# 不能同时输出到文件 和 屏幕

 

 
 
 配置logger对象
#配置 logging
# import  logging
# logger = logging.getLogger()#实例化
# fh = logging.FileHandler('test.log',encoding='utf-8')#实例化一个文件句柄fh
# sh = logging.StreamHandler()#实例化一个对象sh
# #格式
# fmt = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# fh.setFormatter(fmt)     #格式和文件句柄或屏幕句柄关联
# sh.setFormatter(fmt)
# sh.setLevel(logging.WARNING)
# #将sh  和  fh  拿来用
# logger.addHandler(fh)
# logger.addHandler(sh)
# logger.setLevel(logging.DEBUG)
#
# logger.debug('debug message')       # debug 调试模式 级别最低
# logger.info('info message')         # info  显示正常信息
# logger.warning('warning message')   # warning 显示警告信息
# logger.error('error message')       # error 显示错误信息
# logger.critical('critical message')#严重错误
# logging
# logging 是记录日志的模块
View Code

 

 
# 它不能自己打印内容 只能根据程序员写的代码来完成功能
# logging模块提供5中日志级别,从低到高一次:debug info warning error critical
# 默认从warning模式开始显示
# 只显示一些基础信息,我们还可以对显示的格式做一些配置

# 简单配置 配置格式 basicCondfig
# 问题:编码问题,不能同时输出到文件和屏幕
 
 
# logger对象配置
# 高可定制化
# 首先创造logger对象
# 创造文件句柄 屏幕句柄
# 创造格式
# 使用文件句柄和屏幕句柄 绑定格式
# logger对象和句柄关联
# logger.setLevel
# 使用的时候 logger.debug



# from collections import namedtuple
# Point = namedtuple('Point',['x','y'])
# p = Point(1,2)
# p = Point(1,2)
# print(p)
# print(p.x)
# print(p.y)

# from collections import deque
# 双端队列
# dq = deque()
# dq.append(1)
# dq.append(2)
# dq.append(3)
# print(dq)
# print(dq.pop())
# print(dq.popleft())
# dq.appendleft(4)
# dq.appendleft(5)
# print(dq)

import queue
# 队列 先进先出 fifo
# 计算机数据结构模型
# 先进先出

# 栈 先进后出
# 计算机数据结构模型
# 先进先出
# dic = {'k1':'v1','k2':'v1','k3':'v1','k4':'v1'}
# keys = list(dic.keys())
# print(keys)
# for k in keys:
#     print(k,dic[k])

# from collections import OrderedDict
# # dic = dict([('k1','v1'),('k2','v2')])
# # print(dic)
#
# dic = OrderedDict([('k1','v1'),('k2','v2')])
# print(dic)
#打开模块

# def check(filename):#定义一个函数
#     md5obj=hashlib.md5
#     with open(filename,'rb')as  f:
#         while True:#循环读取  每次1024字节
#
#             content = f.read(1024)
#             if content:
#                 md5obj.update(content)
#             else:
#                 break
#     return md5obj.hexdigest()#返回加密后的密文
# ret1=check('king1')
# ret2=check('king2')#导入两个文件
# print(ret1)
# print(ret2)#对比
import hashlib
def king(wenjian):
    objmd5=hashlib.md5()
    with open(wenjian,'rb')as f:
        while True:
            content = f.read(1024)
            if content:
               objmd5.update(content)
            else:
                break
        return objmd5.hexdigest()
a1=king('test.log')
a2=king('userinfo.log')
print(a1)
print(a2)
print(a1==a2)
View Code

 

 
 

 

转载于:https://www.cnblogs.com/benhuli/p/8921525.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值