python常用模块

json

#json 
json 跟字典很像,文本格式
前后端交互基本上都是以json传输的

import json
dict_a={"name":"jianqi","age":None,"isGirl":True}
json_a=json.dumps(dict_a)
print(json_a) #{"name":"jianqi","age":None,"isGirl":True}

new_dict_a=json.loads(json_a)
print(new_dict_a)

with open("tt.json",'w')as f:
    json.dump(dict_a,f)

with open("tt.json",'r')as ff:
    new_dict_b=json.load(ff)
    print(new_dict_b)

datetime

from datetime import datetime
#当前时间
dq = datetime.now()
#时间戳
ret = dq.timestamp()
ret1 = datetime.fromtimestamp(ret)

#格式化输出
print(ret1.strftime('%Y{}%m{}%d{}').format('年','月','日'))
print(type(ret1.strftime('%Y{}%m{}%d{}').format('年','月','日')))

#时间计算
ret = datetime.datetime.now()
td = datetime.timedelta(seconds=38, minutes=11, hours=8)
print(ret+td)

#保存时间
s1 = datetime.date(2024,11,16)
print(s1,type(s1))

s2 = datetime.time(20,30,20)
print(s2,type(s2))

s3 = datetime.datetime(2024,11,16,20,30,20)
print(s3,type(s3))

#便捷输出
s2= datetime.datetime.now().timestamp()
s3 = datetime.datetime.fromtimestamp(s2                                    )
print(s3)

#格式化输出后格式转换
s4 = datetime.datetime.now().strftime('%y-%m-%d')
s5 = datetime.datetime.strptime(s4,'%y-%m-%d')
print(s5,type(s5))

hashlib

#对称加密
    #同一把钥匙
#单向加密
    #不可逆的加密算法
#非对称加密

'''

1.字节类型
2.创建加密对象
3.更新
4.加密

'''
a = "hello world"
b = a.encode("utf-8")
m = hashlib.md5()
m.update(b)
res = m.hexdigest()
print(res)

 题目示例

任何允许用户登录的网站都会存储用户登录的用户名和口令。如果以明文保存用户口令,如果数据库泄露,所有用户的口令就落入黑客的手里。此外,网站运维人员是可以访问数据库的,也就是能获取到所有用户的口令。正确的保存口令的方式是不存储用户的明文口令,而是存储用户口令的哈希,比如MD5。

1)模拟碰撞破解MD5密码,假设你是一个黑客,已经拿到了存储MD5口令的数据库,如何通过MD5反推用户的明文口令。考虑这么个情况,很多用户喜欢用123456,888888,password这些简单的口令,于是,黑客可以事先计算出这些常用口令的MD5值,得到一个反推表(黑客字典)。这样,无需破解,只需要将获取的MD5与黑客字典中的密文比对,若相同,黑客就获得了使用常用口令的用户账号。

请根据文件“密码设置与安全性分析.txt”生成一个黑客字典。将文件中的密码明文用MD5加密,用密文做键,明文为值构建字典。用户输入一个MD5加密后的字符串,从黑客字典中查找明文。

例子:

测试输入:beaf18f1990f0e41a1fce01b2541cdb7 预期输出:密文beaf18f1990f0e41a1fce01b2541cdb7的明文是coolgirl

测试输入:bf37a6b9c4a02cb8ead4c4856c5b2d99 预期输出:密文bf37a6b9c4a02cb8ead4c4856c5b2d99的明文是20001231

测试输入:37bfa6b9c4a02cb8ead4ce01b2541cd9 预期输出:密文37bfa6b9c4a02cb8ead4ce01b2541cd9的明文未能破解

2)检查用户密码是否泄露,用户输入明文,检查是否出现在已经泄露“密码设置与安全性分析.txt”生成的黑客字典

例子:

测试输入:19730516 预期输出:你的密码是19730516,你的密码在泄漏密码字典中

测试输入:Qi5892sl 预期输出:你的密码安全

解答:

import hashlib

#必须执行的操作
def nesscary(mingwen):
    #打开明文文件并保存为列表
    with open(mingwen,'r',encoding="GB18030")as plaintext:
        plaintext_list=plaintext.read()
        new_plaintext_list=plaintext_list.splitlines()

    #遍历列表,将每一个明文转换成密文保存在字典中
    password_dict={}
    for i in new_plaintext_list:
        m=hashlib.md5(i.encode('utf-8')).hexdigest()
        password_dict[i]=m

    return password_dict


def check1(password_dict):
    #字典查密文
    test=input("请输入需要测试的密文")
    #反转字典以 value 为键,以 key 为值
    reversed_dict = {v: k for k, v in password_dict.items()}
    if test in password_dict.values():
        print(f"密文{test}的明文是{reversed_dict[test]}")
    else:
        print(f"密文{test}的明文未能破解")


def check2(password_dict):
    #检查用户密码是否泄露
    password=input("请输入你的密码")
    if password in password_dict.keys():
        print(f"你的密码{password},你的密码在泄漏密码字典中")
    else:
        print("你的密码安全")


def main():
    #主函数
    password_dict=nesscary("密码设置与安全性分析.txt")
    check1(password_dict)
    check2(password_dict)


main()

base64

import base64

a = b"abd"
b = b"abcd"
c = b"abcde"
d = b"abcdef"

base64_a = base64.b64encode(a)
base64_b = base64.b64encode(b)
base64_c = base64.b64encode(c)
base64_d = base64.b64encode(d)

print(base64_a,base64_b,base64_c,base64_d)

b64_a = base64.b64decode(base64_a)
print(b64_a)
'''
1010 1101 0100

101 011 010 100
 y   w   J   j
'''

#专门处理url的base64
import base64

a = b"https://www.baidu.com/"

e64 = base64.urlsafe_b64encode(a)
print(e64)
ba64_a = base64.urlsafe_b64decode(e64)
print(ba64_a)

#+ / 通常会被转换成 -_ 

logging

   字段/属性名称       使用格式                                      描述
       asctime     %(asctime)s

日志事件发生的时间–人类可读时间,如:2003-07-08 16:49:45,896

       created     %(created)f日志事件发生的时间–时间戳,就是当时调用time.time()函数返回的值
 relativeCreated%(relativeCreated)d日志事件发生的时间相对于logging模块加载时间的相对毫秒数
        msecs       %(msecs)d日志事件发生事件的毫秒部分
     levelname    %(levelname)s

该日志记录的文字形式的日志级别

(‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’)

       levelno       %(levelno)s该日志记录的数字形式的日志级别(10, 20, 30, 40, 50)
       name        %(name)s所使用的日志器名称,默认是’root’,因为默认使用的是 rootLogger
      message     %(message)s日志记录的文本内容,通过 msg % args计算得到的
    pathname   %(pathname)s调用日志记录函数的源码文件的全路径
      filename     %(filename)spathname的文件名部分,包含文件后缀
      module      %(module)sfilename的名称部分,不包含后缀
        lineno       %(lineno)d调用日志记录函数的源代码所在的行号
    funcName    %(funcName)s调用日志记录函数的函数名
       process      %(process)d进程ID
  processName%(processName)s进程名称,Python 3.1新增
       thread       %(thread)d线程ID
  threadName      %(thread)s线程名称
import logging

#创建日志对象
logger = logging.getLogger("hello")

#需要将日志写到什么地方去
streamH = logging.StreamHandler() #写到控制台
fileH = logging.FileHandler("test_log.txt")

#日志记录的格式和日志处理的对象进行绑定
formatter = logging.Formatter("[%(asctime)s]LOG:%(levelname)-s:%(message)s")
streamH.setFormatter(formatter)
fileH.setFormatter(formatter)

#将日志对象和和处理对象进行绑定
logger.addHandler(streamH)
logger.addHandler(fileH)

logger.error("捡起")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值