赞
踩
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
[10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 ], [7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14,9, 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14], [2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3], [12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13], [4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12], [13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11],
]
#子秘钥生成 置换选择PC_1盒和PC_2盒
PC_1 = [57, 49, 41, 33, 25, 17,9,
1, 58, 50, 42, 34, 26, 18,
10, 2, 59, 51, 43, 35, 27,
19, 11, 3, 60, 52, 44, 36,
63, 55, 47, 39, 31, 23, 15,
7, 62, 54, 46, 38, 30, 22,
14, 6, 61, 53, 45, 37, 29,
21, 13, 5, 28, 20, 12, 4]
PC_2 = [14, 17, 11, 24, 1, 5, 3, 28,
15, 6, 21, 10, 23, 19, 12, 4,
26, 8, 16, 7, 27, 20, 13, 2,
41, 52, 31, 37, 47, 55, 30, 40,
51, 45, 33, 48, 44, 49, 39, 56,
34, 53, 46, 42, 50, 36, 29, 32]
#秘钥左移的位数
SHIFT = [1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1]
def read_file():
try:
f = open(r"des.txt",‘r’,encoding = ‘utf-8’)
mess = f.read()
f.close()
print(“文件读取成功”)
return mess
except IOError:
print(“文件读取失败”)
def write_file(message):
try:
os.remove(r"des.txt")
f = open(r"des.txt",‘w’,encoding = ‘utf-8’)
f.write(message)
f.close()
print(“文件写入成功”)
except IOError:
print(“文件写入失败”)
#在分组加解密的时候 我们再bit级上进行操作 ,这里将字符ascii转bit流
def str2bin(message):
# 字符串转2进制(bit流) 每个字符8个bit 不够补0
res = “”
for i in message:
tmp = bin(ord(i))[2:]
for j in range(0,8-len(tmp)):
tmp = ‘0’ + tmp
res += tmp
return res
#初始置换IP
def ip_change(bin_str):
#输入为64位明文消息 输出为经过初始置换IP的64位消息
res = “”
for i in IP_table:
res += bin_str[i-1]
return res
#逆初始置换Ip
def ip_re_change(bin_str):
#输入为经过合并的64位分组消息,输出为64位密文
res = “”
for i in IP_re_table:
res += bin_str[i-1]
return res
#循环左移操作
def left_turn(my_str,num):
# 左移 列表拼接
left_res = my_str[num:len(my_str)]
left_res = left_res + my_str[0:num]
return left_res
#密钥的PC-1置换
def change_key1(my_key):
res = “”
for i in PC_1:
res += my_key[i-1]
return res
#密钥的PC-2置换
def change_key2(my_key):
res = “”
for i in PC_2:
res += my_key[i-1]
return res
#E盒扩展置换 明文拓展
def e_str(bin_str):
#输入为32位的右分组消息,输出为48位的经过扩展置换的消息
res = “”
for i in E:
res += bin_str[i-1]
return res
#异或
def str_xor(str1,str2):
res = “”
for i in range(0,len(str1)):
xor_res = int(str1[i]) ^ int(str2[i]) #转int类型再异或
if xor_res == 1:
res += ‘1’
if xor_res == 0:
res += ‘0’
return res
#S盒非线性代换
def s_box(my_str):
# 异或运算结束后,我们需要将48bit缩减位32bit,分组使用S盒置换
res = “”
c = 0 # 第几个S盒 (S0-S7)
for i in range(0,len(my_str),6): # 6 * 8 6位一组,循环8次
now_str = my_str[i:i+6] # 第i个分组,切片
row = int(now_str[0]+now_str[5],2) #第一位和第六位行号
col = int(now_str[1:5],2) #第二为到第五位列号
num = bin(S[c][row * 16 + col])[2:] #一行16个元素 第 row * 16 +col个元素
for i in range(0,4-len(num)): #补全4位输出
num = ‘0’ + num
res += num
c += 1
return res
def p_box(bin_str):
res = “”
for i in P:
res += bin_str[i-1]
return res
#16轮变换后,最后一轮不交换左右分组,直接合并比特流,得到加密后的56位比特
#将密文bit流转为密文字符
def bin2str(message):
res = “”
tmp = re.findall(r’.{8}',message) #八位一字符
for i in tmp:
res += chr(int(i,2)) #二进制字符串转十进制ascii 再转字符
return res
#F轮函数实现 16轮 先将明文32bit拓展为48bit,然后与子密钥Ki进行按位模加运算(即异或),得到的结果按每组6位分为8组,再经过S盒,从每6位中选择出4位,得到32比特,经过P盒置换后,得到最终的32位结果
‘’’
1、扩展置换
2、与轮密钥按位异或
2、经过S盒将每组从48bit缩短到32bit
3、经过P盒置换得到32bit
‘’’
def fun_f(bin_str,key): #32位R分组 和 轮密钥
first_output = e_str(bin_str) #扩展置换
second_output = str_xor(first_output,key) #和轮密钥按位异或
third_output = s_box(second_output) #经过S盒 每组6位缩减到4位(48bit缩减位32bit)
last_output = p_box(third_output) #经过p盒线性置换(换位)
return last_output
‘’’
1、初始置换选择PC-1
2、循环移位(左移)运算 移位次序表中第LS1,LS2,LS9,LS16次是循环左移1位变换,其他为循环左移2为变换
3、置换选择PC-2 最终选择出48bit子密钥
‘’’
def gen_key(key):
key_list = []
divide_output = change_key1(key)
key_C0 = divide_output[0:28] # 分为左右俩部分 每部分占28bit
key_D0 = divide_output[28:]
# 经过循环左移 i是左移位数
for i in SHIFT:
key_C = left_turn(key_C0,i) # 左半部分循环左移
key_D = left_turn(key_D0,i) # 右半部分左移
key_output = change_key2(key_C + key_D) # 经过PC-2盒置换选择出48位子秘钥
key_list.append(key_output)
return key_list
‘’’
1、初始置换
2、明文分L、R
3、轮函数加密 16轮 注意最后一次不用换位
4、左右部分合并
5、逆初始置换
6、返回并将密文写入文件
‘’’
def des_encrypto(bin_message,bin_key):
mes_ip_bin = ip_change(bin_message) # ip置换
key_lst = gen_key(bin_key) # 子秘钥生成
mes_left = mes_ip_bin[0:32] # 明文分组 L、R
mes_right = mes_ip_bin[32:]
for i in range(0,15): # 注意!!! 第16次不用换位
mes_tmp = mes_right
f_result = fun_f(mes_tmp,key_lst[i]) # R组32位与子密钥经过F函数后
mes_right = str_xor(f_result,mes_left) # F函数后的结果与L组 进行异或 结果赋予R组
mes_left = mes_tmp # 原R组直接赋值给L组
f_result = fun_f(mes_right,key_lst[15]) # 最后一次不用换位
mes_fin_left = str_xor(mes_left,f_result)
mes_fin_right = mes_right
fin_message = ip_re_change(mes_fin_left + mes_fin_right) # 合并后 进行逆IP置换
return fin_message
Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。