これは私が理解しなければならない問題です:
「メッセージはクラスで説明されているVigenere暗号化方式を使用して暗号化されており、その暗号文EQNVZが傍受されています。コードを解読してください。キーがメッセージと同じ長さであり、メッセージとキーが大文字のみで構成されていると仮定します。 。」
Pythonでこれを行う方法はありますか?Pythonで暗号文を作成する方法があることは知っていますが、逆の方法はありますか?
これは私が理解しなければならない問題です:
「メッセージはクラスで説明されているVigenere暗号化方式を使用して暗号化されており、その暗号文EQNVZが傍受されています。コードを解読してください。キーがメッセージと同じ長さであり、メッセージとキーが大文字のみで構成されていると仮定します。 。」
Pythonでこれを行う方法はありますか?Pythonで暗号文を作成する方法があることは知っていますが、逆の方法はありますか?
ひっかけ問題です。「キーがメッセージと同じ長さ」の場合、メッセージの長さ以外のすべてを隠すワンタイム パッドがあります。
暗号文は非常に短いため、ブルート フォースするのがおそらく最も簡単です。
def break_vignere(input, list_of_words):
for word in list_of_words:
crypt = vignere(word)
if crypt == input:
return word
return None
もちろん、 で入力テキストが見つからない場合は失敗する可能性がありますlist_of_words。
「EQNVZ」が暗号文全体の場合、キーも大文字 5 文字なので、
from string import uppercase
from itertools import product, imap
for key in imap("".join, product(uppercase, repeat=5)):
if test(key):
break
test()プレーンテキストがすべて大文字であり、おそらく辞書に対してであることをチェックする関数があると仮定して、すべてのキーをテストします。