密碼學中的凱撒密碼
凱撒密碼是一種簡單的替換密碼,以羅馬統治者朱利葉斯·凱撒的名字命名,據說他曾用它與他的官員進行通訊。這種技術涉及將訊息中的每個字母在字母表中移動固定數量的位置。例如,如果移動3個位置,A 將被替換為 D,B 將變為 E,依此類推。
凱撒密碼相對容易破解,被認為是一種非常弱的加密形式,但它對朱利葉斯·凱撒來說已經足夠了。它仍然用於教育和娛樂目的。
凱撒密碼演算法
以下是用凱撒密碼對訊息進行編碼的基本演算法,移位量為 k −
將變數 shift 初始化為 k 的值。
遍歷訊息中的每個字元 c −
如果 c 是字母(大寫或小寫),則在字母表中將其移動 shift 個位置。
要移動大寫字母,請從字母中減去 'A',加上 shift 值,並取模 26。然後新增 'A' 以獲得移動後的字母。
要移動小寫字母,請從字母中減去 'a',加上 shift 值,並取模 26。然後新增 'a' 以獲得移動後的字母。
b. 將移動後的字母附加到編碼後的訊息中。
返回編碼後的訊息。
要解碼編碼後的訊息,可以使用移位量為 -k 的相同演算法。
示例
def caesar_cipher_encrypt(plaintext, shift): ciphertext = "" for c in plaintext: if c.isalpha(): ascii_code = ord(c) if c.isupper(): ascii_code = (ascii_code - ord('A') + shift) % 26 + ord('A') else: ascii_code = (ascii_code - ord('a') + shift) % 26 + ord('a') ciphertext += chr(ascii_code) else: ciphertext += c return ciphertext def caesar_cipher_decrypt(ciphertext, shift): plaintext = "" for c in ciphertext: if c.isalpha(): ascii_code = ord(c) if c.isupper(): ascii_code = (ascii_code - ord('A') - shift) % 26 + ord('A') else: ascii_code = (ascii_code - ord('a') - shift) % 26 + ord('a') plaintext += chr(ascii_code) else: plaintext += c return plaintext
請注意,此演算法是有限的,並且可以被密碼分析師輕鬆破解。不建議在任何實際應用中使用它,它通常用作密碼學領域中的學習工具。
示例
以下是用移位量為 3 的凱撒密碼對訊息進行編碼和解碼的示例 −
plaintext = "HELLO WORLD" shift = 3 ciphertext = caesar_cipher_encrypt(plaintext, shift) print("Encrypted message:", ciphertext) # Encrypted message: KHOOR ZRUOG decrypted_text = caesar_cipher_decrypt(ciphertext, shift) print("Decrypted message:", decrypted_text) # Decrypted message: HELLO WORLD
可以看到,在第一步中,明文“HELLO WORLD”與移位值 3 一起傳遞給 caesar_cipher_encrypt 函式,從而產生密文“KHOOR ZRUOG”。
在第二步中,先前獲得的密文與相同的移位值一起傳遞給 caesar_cipher_decrypt 函式,並獲得原始明文訊息。
示例
plaintext = "hello world" shift = 2 ciphertext = caesar_cipher_encrypt(plaintext, shift) print("Encrypted message:", ciphertext) # Encrypted message: jgnnq ytqng decrypted_text = caesar_cipher_decrypt(ciphertext, shift) print("Decrypted message:", decrypted_text) # Decrypted message: hello world
可以看到,加密和解密過程中使用了移位量 2,從而得到相同的明文訊息“hello world”。
請注意,這只是一個示例,凱撒密碼不安全,不應在實際應用中使用。
如何解密?
凱撒密碼是一種簡單的替換密碼,因此解密編碼訊息最直接的方法是嘗試不同的移位值,直到解密後的訊息有意義為止。這稱為“暴力破解”攻擊。
以下是用暴力破解攻擊解碼編碼訊息的基本演算法 −
遍歷所有可能的移位值,從 0 到 25(因為字母表中有 26 個字母)。
對於每個移位值,建立一個新的空字串來儲存解碼後的訊息。
遍歷編碼訊息中的每個字元 c −
如果 c 是字母(大寫或小寫),則在字母表中將其向後移動當前移位值個位置。
要將大寫字母向後移動,請從字母中減去當前移位值,加上 26 並取模 26。然後新增 'A' 以獲得原始字母。
要將小寫字母向後移動,請從字母中減去當前移位值,加上 26 並取模 26。然後新增 'a' 以獲得原始字母。
將移動後的字母附加到解碼後的訊息中。
列印解碼後的訊息以及使用的移位值。
重複此過程,直到訊息有意義為止。
值得一提的是,更高階的方法(如頻率分析、模式識別)可以比暴力破解方法更快地破解密文。
需要注意的是,凱撒密碼非常弱,在現代密碼學中不被認為是安全的。它通常用作學習工具,以介紹替換密碼的概念。