Encryption
辨識和解密具有已知明文和密文的自定義密碼
我一直在嘗試重建一種加密算法,該算法從已知的明文中生成已知的密文。我做了一些分析:
- 該算法對單個字節進行操作
- 純文字可以是任意長度,並且
len(ptext) == len(ctext)
- 對於相同的字母明文,密文在 20B 之後重複
範例(字節為十六進制;ASCII(A) == 0x41):
P: 4141414141414141414141414141414141414141 414141... C: cbcd7f01128216acb2495fa2625aa245d9d30366 cbcd7f...
- 輸入的微小變化反映了輸出的微小變化
範例(ASCII(B)= 0x42;差異可能是最大 +-3):
P1: 414141414141... P2: 424242424242... C1: cd7f01128216... C2: ce7c02118115...
- 來自單個字母明文的密文的異或顯然是相關的
範例(Cx = 相同字母“x”明文的密文)
Ca: cd7f01128216... Cb: ce7c02118115... Cc: cf7d03108014... Cd: c87a04178713... Ca ^ Cb: 3 3 3 3 3... Ca ^ Cc: 2 2 2 2 2... Ca ^ Cd: 5 5 5 5 5... Cb ^ Cc: 1 1 1 1 1... Cb ^ Cd: 6 6 6 6 6... Cc ^ Cd: 7 7 7 7 7...
你認識這個密碼嗎?我該如何繼續我的分析/重建算法?
另一個複雜因素是密文似乎在每條新消息中都“輪換”了,明白我的意思。
範例(P1 和 P2 分別發送;’!’ 僅用於更好地視覺化):
P1: P2 P2: 4141414141414141414141414141414141414141 414141... C1: !!!cbcd7f01128216acb2495fa2625aa245d9d30366 cbcd7f... C2: 0366!!!cbcd7f01128216acb2495fa2625aa245d9d3 0366cb...
我是初學者,任何幫助表示讚賞。
我想到了。
keys = [k1, k2, ... , k20] def encrypt(offset, message): ctext = [] for i in len(message): ctext[i] = keys[(offset + i) % len(keys)] ^ message[i]
“旋轉”是由“偏移”參數引起的。密鑰儲存在旋轉緩衝區中,並與純文字字節進行異或運算。可以通過將明文與密文異或來獲得密鑰。