用python编写维吉尼亚密码加解密

简单介绍:维吉尼亚密码算法使用一个密钥和一个表来实现加密,根据明文和密钥的对应关系进行查表来决定加密结果。假设替换表如图https://www.qqxiuzi.cn/bianma/weijiniyamima.png所示,最上面一行表示明文,最左边一列表示密钥,那么二维表格中与明文字母和密钥字母对应的字母就是加密结果。例如单词PYTHON使用ABCDEF做密钥的加密结果就是PZVKSS

可在此网站验证https://www.qqxiuzi.cn/bianma/weijiniyamima.php

代码:

from string import ascii_uppercase as uppercase
from itertools import cycle

#创建密码表
table=dict()
for ch in uppercase:
    index=uppercase.index(ch)
    table[ch]=uppercase[index:]+uppercase[:index]
    
#创建解密码表
deTable={'A':'A'}
start='Z'
for ch in uppercase[1:]:
    index=uppercase.index(ch)
    deTable[ch]=chr(ord(start)+1-index)

#解密密钥
def deKey(key):
    return ''.join([deTable[i] for i in key])

#加密/解密
def encrypt(plainText,key):
    result=[]
    #创建cycle对象,支持密钥字母的循环使用
    currentKey=cycle(key)
    for ch in plainText:
        if 'A'<=ch<='Z':
            index=uppercase.index(ch)
        #获取密钥字母
            ck=next(currentKey)
            result.append(table[ck][index])
        else:
            result.append(ch)
    return ''.join(result)

#进行加密
key=input('请输入你的密钥:')#输入只能大写字母
p=input('请输入你想要的加密的内容:')#输入只能大写字母
c=encrypt(p,key)
print('加密后的内容为',c)
#进行解密
q=input('请输入你想要解密的内容:')
key1=input('请输入密钥:')
print('解密后的内容为:',encrypt(q,deKey(key1)))

测试:

猜你喜欢

转载自blog.csdn.net/qq_38452951/article/details/109278488