最近在上密码学,随便写着玩玩。
import linecache
import msvcrt
def chineseToUnic(ch): #汉转U
return ch.encode('unicode_escape')
def UnicTochinese(ch): #U转汉
ch1 = ch.decode('unicode_escape')
return ch1
def charToUnic(ch): #二次加密
keycreate = []
strsave = []
saver = []
num = 0
for i in range(0, len(ch)):
if ch[i] > 256:
num = ch[i]//256
strsave.append(ch[i] % 256)
keycreate.append(num)
if ch[i] <= 256:
ketcreate.append(0)
strsave.append(ch[i])
saver.append(keycreate)
saver.append(strsave)
return saver
def Whispersfor604(PlainU): #明文加密
k = 5#加密键值(可更改)
strsave = []
numsave = 0
for i in range(0, len(PlainU)):
numsave = PlainU[i]*k*abs(k-2)#加密算法(可更改)
strsave.append(numsave)
return strsave
def road(key, whispermath): #加密字符显现
intstrsave = []
for i in range(0, len(whispermath)):
intstrsave.append(chr(whispermath[i]))
strsaver = ''.join(intstrsave)
return strsaver
def scream(num):#加密符号生成
str = []
for i in range(0, len(num)):
str.append(chr(num[i]))
return str
def clear(str):#加密符号解密
result = []
for i in range(0, len(str)):
result.append(ord(str[i]))
return result
def slove(key, whispermath):#二次解密
numsaver1 = []
num = 0
for i in range(0, len(whispermath)):
num = (int(key[i])*256)+whispermath[i]
numsaver1.append(num)
return numsaver1
def slovefor604(PlainU): #密文解密
k = 5#加密键值(可更改)
strsave = []
numsave = 0
for i in range(0, len(PlainU)):
numsave = PlainU[i]/(k*abs(k-2))#加密算法(可更改)
strsave.append(round(numsave))
return strsave
def simple(list):#密钥简约生成
numlist = []
for i in range(0, len(list)):
numlist.append(str(list[i]))
str2 = "".join(numlist)
return str2
strnum = []
strnum2 = []
choice = int(input("输入1进行加密工作,输入2进行解密工作:"))
#加密组
if choice == 1:
content = input("输入你想加密的明文:")
writer = input("输入密文留言:")
contentU = chineseToUnic(content)
contentH = UnicTochinese(contentU)
whispers = Whispersfor604(contentU)
whispersH = charToUnic(whispers)
a = road(whispersH[0], whispersH[1])
b = scream(whispersH[1])
#密钥本地生成
print("密钥已生成在本地路径,密文名称为:", '南05第'+str(whispersH[1][len(whispersH[1])-1])+'号密文')
result2txt = simple(whispersH[0]) # data是前面运行出的数据,先将其转为字符串才能写入
with open('南05第'+str(whispersH[1][len(whispersH[1])-1])+'号密文', 'wt', encoding='utf-8') as file_handle: # .txt可以不自己新建,代码会自动新建
file_handle.write(result2txt+"\n")
for i in range(0, len(b)):
file_handle.write(b[i]+"\n")
file_handle.write(writer)
#解密组
if choice == 2:
U = ''
num = input("请输入密文中包含的连续数字(左至右):")
key = " " + input("请输入密文留言:") + "\n"
f = open('南05第' + num + '号密文', 'r')
txt = ''
whispers = ''
whispers = linecache.getline('南05第' + num + '号密文', 1)
txt = " "+linecache.getline('南05第' + num + '号密文', len(whispers)+1)
if txt == key:
content = []
for i in range(1, len(whispers)):
content.append(linecache.getline('南05第' + num + '号密文', i+1).replace("\n", ""))
contentNum = []
contentNum = clear(content)
beforeresult = slove(whispers, contentNum)
result = slovefor604(beforeresult)
else:
exit("留言有问题,停止解密工作")
for i3 in range(0, len(result)):
num = 0
num = result[i3]
strnum.append(num)
U = UnicTochinese(bytes(strnum))
print("解析成功,密文内容为:" + U)
print("程序将在三秒后退出")
import time
time.sleep(3)