维吉尼亚密码算法
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))
书上的方法:
在这里插入代码片