用python編寫維吉尼亞密碼加解密

2021-10-25 05:37:46 字數 1312 閱讀 3557

簡單介紹:維吉尼亞密碼演算法使用乙個金鑰和乙個表來實現加密,根據明文和金鑰的對應關係進行查表來決定加密結果。假設替換表如圖所示,最上面一行表示明文,最左邊一列表示金鑰,那麼二維**中與明文本母和金鑰字母對應的字母就是加密結果。例如單詞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 維吉尼亞...