python实现短语密码加解密

实现目标

短语密码

收获

  1. 了解了更多的古典密语加解密方法
  2. 这是一种基于一个字母对应一个字符的加解密方式

日常

  1. 写作业
  2. 编写加解密程序
  3. 给同学讲题

憧憬

  1. 能了解更多的加密解密方式,虽然我不一定从事这方面,但是确实是提升自己的一种方式
  2. 希望自己的动手能力越来越强吧
  3. 把我上课老师让编写的加解密都写一遍吧

代码部分

这是用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)]

猜你喜欢

转载自blog.csdn.net/m0_62101200/article/details/124518939