Encryption

辨識和解密具有已知明文和密文的自定義密碼

  • July 27, 2021

我一直在嘗試重建一種加密算法,該算法從已知的明文中生成已知的密文。我做了一些分析:

  • 該算法對單個字節進行操作
  • 純文字可以是任意長度,並且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]

“旋轉”是由“偏移”參數引起的。密鑰儲存在旋轉緩衝區中,並與純文字字節進行異或運算。可以通過將明文與密文異或來獲得密鑰。

引用自:https://crypto.stackexchange.com/questions/76849