实现目标
短语密码
收获
- 了解了更多的古典密语加解密方法
- 这是一种基于一个字母对应一个字符的加解密方式
日常
- 写作业
- 编写加解密程序
- 给同学讲题
憧憬
- 能了解更多的加密解密方式,虽然我不一定从事这方面,但是确实是提升自己的一种方式
- 希望自己的动手能力越来越强吧
- 把我上课老师让编写的加解密都写一遍吧
代码部分
这是用python代码实现的
1.这部分是为了通过密钥得到加密字符对照表
from operator import itemgetter
inp=input('请输入密钥:')# university
li_inp=list(inp)
length1=len(li_inp) # 删除重复元素前元素个数
for i in range(1,length1-1):
for j in range(0,i):
if li_inp[i]==li_inp[j]: # 得到重复的元素的下标
li_inp.pop(i)
i-=1
break
length2=len(li_inp) # 删除重复元素后元素个数
li_secret=[]
for s in range(0,26):
li_secret.append(0)
for a1 in range(length1,length1+length2): # 从长度+1处开始
li_secret[a1]=li_inp[a1-length1]
n=97
for a2 in range(length1+length2,26):
while li_inp.count(chr(n))>0: # 如果该元素是明文中的字符
n+=1
li_secret[a2]=chr(n)
n+=1
for a3 in range(0,length1):
while li_inp.count(chr(n))>0: # 如果该元素是明文中的字符
n+=1
li_secret[a3]=chr(n)
n+=1
st_secret=''.join(li_secret)
St_secret=st_secret.upper()
print('a-z的对照表:',St_secret)
2.上面部分代码已经实现了对照序列,下面将a-z和其对应的加密后的字符合并成一个字典,方便后面加解密操作
li_alpha=[]
for al in range(97,123):
li_alpha.append(chr(al)) # 生成字母表
dic_secret=dict(zip(li_alpha,St_secret))
print(dic_secret)
3.这里是通过字典的key查找对应的value,实现加密字符合并,得到密文
write=list(input('请输入明文:'))
print('密文为:',end='')
secret=[]
for k in write:
secret.append(dic_secret[k])
st_sec=''.join(secret)
print(st_sec)
4.这里是解密部分,定义了一个函数,可以通过value查找对应的key,其中value是输入的明文字符串。
def get_key(dic,value): # 通过value查找对应的key
keys=list(dic.keys())
values=list(dic.values())
idx=values.index(value)
key=keys[idx]
return key
li_ipsec=list(input('请输入密文:'))
li_write=[]
for value in li_ipsec:
li_write.append(get_key(dic_secret, value))
write=''.join(li_write) # 将获取的明文字符列表拼接成字符串
print('明文为:'+write)
li_write=[key for value in li_ipsec key=get_key(dic_secret,value)]