Vigenère密碼是一種經典的加密方法,它通過使用一個關鍵詞對明文進行加密,從而增強加密的復雜性。與簡單的凱撒密碼相比,Vigenère密碼通過多表替換的方式,使得破解難度大大增加。本文將介紹如何在Python中使用Vigenère密碼進行加密和解密。
Vigenère密碼是由法國 cryptographer Blaise de Vigenère 在16世紀發明的一種多表替換密碼。它通過使用一個關鍵詞對明文進行加密,每個字母的位移量由關鍵詞中對應字母的位置決定。例如,關鍵詞為“KEY”,則明文的第一個字母使用K的位移量,第二個字母使用E的位移量,第三個字母使用Y的位移量,依此類推。
Vigenère密碼的加密過程可以描述為:
[ C_i = (M_i + K_i) \mod 26 ]
其中: - ( C_i ) 是密文的第i個字母 - ( M_i ) 是明文的第i個字母 - ( K_i ) 是關鍵詞的第i個字母 - 字母A到Z分別對應0到25
Vigenère密碼的解密過程與加密過程相反:
[ M_i = (C_i - K_i) \mod 26 ]
其中: - ( M_i ) 是明文的第i個字母 - ( C_i ) 是密文的第i個字母 - ( K_i ) 是關鍵詞的第i個字母
下面是一個簡單的Python實現Vigenère密碼的加密和解密過程的示例代碼:
def vigenere_encrypt(plaintext, key):
encrypted_text = ""
key_length = len(key)
for i, char in enumerate(plaintext):
if char.isalpha():
shift = ord(key[i % key_length].upper()) - ord('A')
if char.isupper():
encrypted_text += chr((ord(char) - ord('A') + shift) % 26 + ord('A'))
else:
encrypted_text += chr((ord(char) - ord('a') + shift) % 26 + ord('a'))
else:
encrypted_text += char
return encrypted_text
def vigenere_decrypt(ciphertext, key):
decrypted_text = ""
key_length = len(key)
for i, char in enumerate(ciphertext):
if char.isalpha():
shift = ord(key[i % key_length].upper()) - ord('A')
if char.isupper():
decrypted_text += chr((ord(char) - ord('A') - shift) % 26 + ord('A'))
else:
decrypted_text += chr((ord(char) - ord('a') - shift) % 26 + ord('a'))
else:
decrypted_text += char
return decrypted_text
# 示例使用
plaintext = "HELLOWORLD"
key = "KEY"
encrypted_text = vigenere_encrypt(plaintext, key)
print(f"加密后的文本: {encrypted_text}")
decrypted_text = vigenere_decrypt(encrypted_text, key)
print(f"解密后的文本: {decrypted_text}")
vigenere_encrypt
函數用于加密明文,vigenere_decrypt
函數用于解密密文。ord
函數將字母轉換為ASCII碼,chr
函數將ASCII碼轉換回字母。假設明文為 "HELLOWORLD"
,關鍵詞為 "KEY"
,則運行上述代碼后,輸出如下:
加密后的文本: RIJVSGSPVH
解密后的文本: HELLOWORLD
Vigenère密碼是一種簡單但有效的加密方法,適用于初學者學習密碼學的基本概念。通過Python實現Vigenère密碼的加密和解密過程,可以幫助我們更好地理解其工作原理。雖然Vigenère密碼在現代密碼學中已經不再安全,但它仍然是學習密碼學的一個重要起點。
希望本文對你理解和使用Vigenère密碼有所幫助!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。