【python练习】维吉尼亚密码算法

维吉尼亚密码算法
Description

使用一个密钥和维吉尼亚密码替换表来对字符串进行加密和解密。密码表如下:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
A:ABCDEFGHIJKLMNOPQRSTUVWXYZ
B:BCDEFGHIJKLMNOPQRSTUVWXYZA
C:CDEFGHIJKLMNOPQRSTUVWXYZAB
D:DEFGHIJKLMNOPQRSTUVWXYZABC
E:EFGHIJKLMNOPQRSTUVWXYZABCD
F:FGHIJKLMNOPQRSTUVWXYZABCDE
G:GHIJKLMNOPQRSTUVWXYZABCDEF
H:HIJKLMNOPQRSTUVWXYZABCDEFG
I:IJKLMNOPQRSTUVWXYZABCDEFGH
J:JKLMNOPQRSTUVWXYZABCDEFGHI
K:KLMNOPQRSTUVWXYZABCDEFGHIJ
L:LMNOPQRSTUVWXYZABCDEFGHIJK
M:MNOPQRSTUVWXYZABCDEFGHIJKL
N:NOPQRSTUVWXYZABCDEFGHIJKLM
O:OPQRSTUVWXYZABCDEFGHIJKLMN
P:PQRSTUVWXYZABCDEFGHIJKLMNO
Q:QRSTUVWXYZABCDEFGHIJKLMNOP
R:RSTUVWXYZABCDEFGHIJKLMNOPQ
S:STUVWXYZABCDEFGHIJKLMNOPQR
T:TUVWXYZABCDEFGHIJKLMNOPQRS
U:UVWXYZABCDEFGHIJKLMNOPQRST
V:VWXYZABCDEFGHIJKLMNOPQRSTU
W:WXYZABCDEFGHIJKLMNOPQRSTUV
X:XYZABCDEFGHIJKLMNOPQRSTUVW
Y:YZABCDEFGHIJKLMNOPQRSTUVWX
Z:ZABCDEFGHIJKLMNOPQRSTUVWXY

表中第一行是明码,如PYTHON用密钥AB加密,则有如下对应:

明码:P Y T H O N

密钥:A B A B A B

结果:P Z T I OO

解密算法反之。


Input
3行,第一行是指令0表示加密,1表示解密;第二是全部由大写字母组成一个待加密或待解密字符串(不超过255字符);第二行是密钥。


Output
1行,加密或解密后的字符串。


Sample Input 1 

0
PYTHON
AB
Sample Output 1

PZTIOO
Sample Input 2 

1
PZTIOO
AB
Sample Output 2

PYTHON
Hint

有难度的一个题目。

Source

中学生可以这样学Python,P121例5-9

python代码实现:
我的方法:

import string
adict={}
upper=string.ascii_uppercase##大写字母
#print(upper)
for i in upper:
    a=upper.index(i)
    b=upper[a:]+upper[:a]
    adict[i]=b
def jiami(s,k):
    jiamihou=''
    miyao_len=len(k)
    for i in range(len(s)):
        table=adict[k[i%miyao_len]] ##每个字母对应的密码表
        #s[i]=table[i]
        jiamihou=jiamihou+table[upper.index(s[i])]
    return jiamihou
def jiemi(s,k):
    jiemihou=''
    miyao_len=len(k)
    for i in range(len(s)):
        table=adict[k[i%miyao_len]] ##每个字母对应的密码表
        #s[i]=table[i]
        jiemihou=jiemihou+upper[table.index(s[i])]
    return jiemihou
zhiling=int(input())  ##准备加密还是解密
astr=input()  ##要加密or解密的字符串
miyao=input()  ##密钥
if zhiling==0:
    ##加密
    print(jiami(astr,miyao))
elif zhiling==1:
    ##解密
    print(jiemi(astr,miyao))


书上的方法:

在这里插入代码片
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值