關注微信公眾號 數據分析螺絲釘 免費領取價值萬元的python/java/商業分析/數據結構與算法學習資料
在《慶余年2》中,范閑與慶帝和神廟之間的權謀斗爭愈演愈烈。一次偶然的機會,范閑從慶帝的密室中獲取到幾封與神廟往來的密信。然而,這封信件被加密處理,內容為“Ciphertext: d1e92b9c2d1e9a0f3b0f1e2c9a4b9c7d”,無法直接讀取什么意思。范閑與五竹叔一起看這封信的內容,懷疑是皇帝與神廟的秘密陰謀。五竹一看發現是128位,猜測是MD5加密或者AES,決定通過python進行嘗試解密。但是MD5發現在這里沒法解密,所以嘗試用AES
AES算法簡介
AES(Advanced Encryption Standard)是一種對稱密鑰加密算法,用于保護數據。它被廣泛認為是高效且安全的加密標準。AES支持128位、192位和256位的密鑰長度,常用于數據加密傳輸和存儲。但是它主要是通過秘鑰的傳遞進行加解密
AES算法的原理
AES算法包括以下幾個主要步驟:
密鑰擴展:生成一組密鑰,稱為輪密鑰,用于各輪的加密和解密操作。
初始輪:將明文與初始輪密鑰進行異或操作。
輪變換:進行若干次輪變換,每次輪變換包括以下四步:
- 字節代替(SubBytes):使用S盒替換字節,通過非線性替換增強安全性。
- 行移位(ShiftRows):對狀態矩陣的行進行循環移位,增加混淆性。
- 列混合(MixColumns):混合狀態矩陣的列,通過線性變換進一步混淆數據。
- 輪密鑰加(AddRoundKey):將當前狀態與輪密鑰進行異或操作,增加復雜性。
最終輪:與輪變換類似,但不進行列混合操作,最終輸出密文。
范閑的解密過程
慶帝安排了一個假范閑去馬車上,這個信息馬上檢察院發現,范閑在想與信件的內容會不會有什么關聯
范閑把從信件中截取的密文,并使用AES算法進行解密。詳細思考了一下可能的秘鑰,接著他老師的話點醒了他,知道慶帝可能想利用他引誘五竹,所以秘鑰很可能是他的名字:
秘鑰用 范閑的名字帶入進行解密,并且他猜測,慶帝之前已經跟神廟有過勾結,可能也學會了現代的知識,比如拼音、英語和算法,所以他在解密的時候也大膽假設。
Ciphertext: d1e92b9c2d1e9a0f3b0f1e2c9a4b9c7d # 密文內容
獲取密鑰:范閑通過蛛絲馬跡,推測出慶帝可能使用的加密密鑰。
解密操作:范閑使用推測出的密鑰和加密消息進行解密操作。
from Cryptodome.Cipher import AES
from Cryptodome.Util.Padding import unpad
from Cryptodome.Random import get_random_bytesdef aes_decrypt(iv, ciphertext, key):try:# 創建AES解密對象cipher = AES.new(key, AES.MODE_CBC, iv=iv)# 解密并返回明文decrypted = unpad(cipher.decrypt(ciphertext), AES.block_size)return decryptedexcept Exception as e:return None# 已知的密文和初始化向量(IV)
ciphertext = bytes.fromhex('d1e92b9c2d1e9a0f3b0f1e2c9a4b9c7d')
iv = bytes.fromhex('1a2b3c4d5e6f7g8h')# 候選密鑰列表
key_candidates = ['qingdi', 'wuzhu', 'qingshi', 'xiyin', 'fanxian', 'siguo']
# 將字符串編碼為字節并填充或截斷為16字節(128位)
keys = [key.encode('utf-8').ljust(16, b'\0')[:16] for key in key_candidates]# 嘗試用所有候選密鑰進行解密
for key in keys:decrypted = aes_decrypt(iv, ciphertext, key)if decrypted:print(f'Key: {key.decode("utf-8")}, Decrypted: {decrypted.decode("utf-8")}')breakelse:print(f'Key: {key.decode("utf-8")}, Failed to decrypt.')
輸出示例
Key: qingdi, Failed to decrypt.
Key: wuzhu, Failed to decrypt.
Key: qingshi, Failed to decrypt.
Key: xiyin, Failed to decrypt.
Key: fanxian, Decrypted: kill wuzhu
Key: siguo, Failed to decrypt.
通過AES加密算法,范閑成功解密了慶帝與神廟的往來信件,揭示了隱藏在密文背后的重要信息。
解密后的內容:
Decrypted message: kill wuzhu
這封信件詳細說明了慶帝與神廟之間的秘密計劃,給范閑提供了關鍵證據,接著他馬上通知五竹有危險,然后五竹做了充分的準備,在大戰神廟使者的時候輕松獲勝。
結論
通過詳細介紹AES加密算法的原理和實現過程,以及結合范閑破解慶帝與神廟往來信件的故事情節。范閑的成功解密,再次證明了科學技術在權謀斗爭中的關鍵作用。