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)s | pathname的文件名部分,包含文件后缀 |
| module | %(module)s | filename的名称部分,不包含后缀 |
| 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("捡起")

被折叠的 条评论
为什么被折叠?



