耿直boy6

day 22 常用模块二

大纲

常用模块二

                   hashlib模块

                    configparse

             logging

    项目开发规范

1.常用模块二

01.hashlib的特点:

用sha算法加密如下

import hashlib
sha_obj = hashlib.sha1()
sha_obj.update(b'alex3714')
print(sha_obj.hexdigest())
结果:
8a003668a9c990f15148f9e4046e1410781533b6

用md5算法加密如下:

import hashlib
md5_obj = hashlib.md5()
md5_obj.update(b'alex3714')
print(md5_obj.hexdigest())
结果:
aee949757a2e698417463d47acac93df

 

hashlib共计两种加密方法,MD5及SHA1算法
是一个模块,提供队中i功能算法
同一个字符串用同一个算法进行价目,结果总是相同的
同一个字符串用不同的算法进行加密,结果总是不同的
那为什么要使用hashlib进行加密呢?
02.登录

#用于加密
import hashlib
md5_obj=hashlib.md5()
md5_obj.update(b'alex1234')
print(md5_obj.hexdigest())
结果:
b8b28fcfe009057f2ef7362b1e91fe7a

 

import hashlib
user = input('username : ') pwd = input('password : ') md5_obj = hashlib.md5() md5_obj.update(pwd.encode('utf-8')) str_md5 = md5_obj.hexdigest()
print(str_md5) #将打印出来的密码的加密版复制到 ‘userinfo’文件中 with open(
'userinfo',encoding='utf-8') as f: for line in f: name,passwd = line.split('|') if name == user and str_md5 == passwd:#文件中加密版密码和输入密码的临时加密版进行比较 print('登录成功') break

 


将dj080000转化,转化之后的结果存储在文件里
登录时:输入密码,用同样的方法转化,将结果与文件中的进行匹配
import hashlib ----hashlib.md5----hashlib,sha


03.md5算法:暴力破解,撞库

04.md5第二个功能
校验文件的一致性:md5 速度快
如果一个文件的size比较大 8个g

md5_obj = hashlib.md5()
md5_obj.update(b'alex')
md5_obj.update(b'3714')
str_md5 = md5_obj.hexdigest()
print(str_md5)
import os
with open(r'E:\python S12全期笔记\day 22\hashlib算法.py',encoding='utf-8') as f:
    file_size =  os.path.getsize(r'E:\python S12全期笔记\day 22\hashlib算法.py')
    md5_obj = hashlib.md5()
    while file_size > 0:
        str_content = f.read(1024)
        md5_obj.update(str_content.encode('utf-8'))
        file_size -= 1024
    print(md5_obj.hexdigest())
结果:
aee949757a2e698417463d47acac93df
bb6c9e92e90252c36a7bca547ef64384

 


05.sha算法:是一个算法集,随着后边数字越大,计算的时间越长,结果越长越安全
动态加盐:每一个用户的密码的密文的

#格式:hashlib.md5("salt".encode("utf8"))
第二行里边的‘盐’,可以改成任意字符,为了防止密码被篡改!
import hashlib
md5_obj=hashlib.md5(''.encode('utf-8'))
md5_obj.update(b'123456')
print(md5_obj.hexdigest())
结果:
970d52d48082f3fb0c59d5611d25ec1e

 

#首先先创建一个'pwd.txt'文件,里边写入用户名、密码的md5值,中间使用  ‘|’连接!!
#注意:username 也可以做盐! username
= input('username: ') password = input('password: ') md5_obj = hashlib.md5(''.encode('utf-8')) md5_obj.update(password.encode('utf-8')) md5_str = md5_obj.hexdigest() with open('pwd.txt') as f: for line in f: name,pwd = line.split('|') if name == username and pwd == md5_str: print('登录成功') break 结果: 输入:dj 在输入密码 123456 登陆成功!

 



06  动态加盐,加密比较厉害,动态加盐的摘要算法 ----完美

     

#动态加盐  主要就是将username作为‘盐’,这样就比较保险!
#首先要获取密码的 加密值,运行程序,输入用户名即密码,出现加密密码

username: 杜举飞
password: 123456
6e40d83cf7dd6513b8d8f8d8d998e57d

#再将加密的密码复制到文件‘userinfo’中,再次登录,结果如下:

username: dujufei
password: 123456
b1b7100361750d15189aa4a1a6724dce

#程序如下:
import
hashlib username = input('username: ') password = input('password: ') md5_obj = hashlib.md5(username.encode('utf-8')) md5_obj.update(password.encode('utf-8')) str_md5 = md5_obj.hexdigest() print(str_md5) with open('userinfo'encoding='utf-8') as f:
  for line in f:
    name,pwd
= line.split('|')
    if name == username and pwd == str_md5:
      print('登录成功')
      break

 

 

 

 

 

 

2.configparse

 

 

3.logging

 3.1函数简单配置

        ‘’日志‘’(日本林志玲)级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG,默认只打印大于等于warning级别的。

 

import logging
logging.debug('debug message')  # 调试的时候
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')  # 批判的
结果:
WARNING:root:warning message
ERROR:root:error message
CRITICAL:root:critical message

 

 

3.2.basicConfig

   

#显示debug以上的信息!!
import
logging logging.basicConfig(level=logging.DEBUG) format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', logging.debug('debug message') # 调试的时候 logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message') # 批判的 结果:

DEBUG:root:debug message
INFO:root:info message
WARNING:root:warning message
ERROR:root:error message
CRITICAL:root:critical message

 

 

 

import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s'
)
logging.debug('debug message')  # 调试的时候
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')  # 批判的
结果
2018-05-29 20:12:17,835 4.logging模块.py[line:29] DEBUG debug message
2018-05-29 20:12:17,842 4.logging模块.py[line:30] INFO info message
2018-05-29 20:12:17,842 4.logging模块.py[line:31] WARNING warning message
2018-05-29 20:12:17,843 4.logging模块.py[line:32] ERROR error message
2018-05-29 20:12:17,843 4.logging模块.py[line:33] CRITICAL critical message

 

3.3 getlogging

getlogging和basicConfig的区别就是getlogging是操作一个对象!上边的basicConfig直接进行操作!
import logging
logger=logging.getLogger()
import logging

logger = logging.getLogger()
# 创建一个handler,用于写入日志文件,会将你写的日志打印到这个日志里边!
fh = logging.FileHandler('test.log',encoding='utf-8') 

# 再创建一个handler,用于输出到控制台 ,在python里显示的就是下下边这行这种格式!
ch = logging.StreamHandler() 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

fh.setLevel(logging.DEBUG)

fh.setFormatter(formatter) 
ch.setFormatter(formatter) 
logger.addHandler(fh) #logger对象可以添加多个fh和ch对象 
logger.addHandler(ch) 

logger.debug('logger debug message') 
logger.info('logger info message') 
logger.warning('logger warning message') 
logger.error('logger error message') 
logger.critical('logger critical message')

 

 

 

 

 

4.项目开发规范

 

posted on 2018-05-31 17:55  猫巴  阅读(111)  评论(0)    收藏  举报

导航

原文:https://www.cnblogs.com/djfboai/ 版权声明:本文为博主原创文章,转载请附上博文链接!