#秘钥左移的位数
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 P