簡單介紹:維吉尼亞密碼演算法使用乙個金鑰和乙個表來實現加密,根據明文和金鑰的對應關係進行查表來決定加密結果。假設替換表如圖所示,最上面一行表示明文,最左邊一列表示金鑰,那麼二維**中與明文本母和金鑰字母對應的字母就是加密結果。例如單詞python使用abcdef做金鑰的加密結果就是pzvkss
可在此**驗證
**:
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=
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)
else:
return ''.join(result)
#進行加密
key=input('請輸入你的金鑰:')#輸入只能大寫字母
p=input('請輸入你想要的加密的內容:')#輸入只能大寫字母
c=encrypt(p,key)
print('加密後的內容為',c)
#進行解密
q=input('請輸入你想要解密的內容:')
key1=input('請輸入金鑰:')
print('解密後的內容為:',encrypt(q,dekey(key1)))
測試:
維吉尼亞密碼
維吉尼亞密碼是在凱撒密碼基礎上產生的一種加密方法,它將凱撒密碼的全部25種位移排序為一張表,與原字母序列共同組成26行及26列的字母表。另外,維吉尼亞密碼必須有乙個金鑰,這個金鑰由字母組成,最少乙個,最多可與明文本母數量相等。維吉尼亞密碼加密方法示例如下 明文 i ve got it.金鑰 ok 密...
古典密碼 python實現維吉尼亞密碼
def secret 加密過程 str input 請輸入明文 str list list str k list x for x in input 請輸入金鑰流 split 輸入金鑰流,以空格為間隔 print k list for i in range len str list 判斷輸入金鑰為數字...
古典密碼之維吉尼亞密碼
include include intmain int i,h,x,count 0,m,m1,t int l,l2,lk,lk2,l3,l4 int p 0,j 0,n 0,p2 0,n1 0,j1 0,c 0,count1 0,count2 0 int r printf n printf 維吉尼亞...