私は挑戦を受けて、今はちょっと立ち往生しています。基本的には、XORされたASCIIコードのリストがあります。鍵はサイズ5の小文字の英字です。私はこれを解読するために周波数解析やPython用のツール(xortoolのようなもの)の使い方からさまざまな方法を読んだが、それらを機能させることはできなかった。 Xortoolは引数-l 5 -oで使用され、私は悲しみのように不器用な結果を100回受け取りました。XORされた文字列を、すべての可能な小文字の組み合わせで構成されたキーで解読する機能
この例では、上記ASCIIの最初の5つのコードのみを使用します。完全なメッセージは、バイナリに変換され、長さ1125
xor_min = ["49","29","1","67","42"]
これである:
converted_min = ['00110001', '00011101', '00000001', '01000011', '00101010']
そしてIは、バイナリ形式で、小文字、アルファベットのすべての文字を含む別のリストを作りました。
alph = list(string.ascii_lowercase)
bin_key = convert_to_bin((convert_to_ascii(alph)))
これまですべてが完全に機能しています。今、私は何をしたいbin_keyのうち、26
key = list(itertools.combinations(bin_key, 5))
オクラホマのうち、すべての可能な組み合わせを含むサイズ5のキーを作成することです。現在のkeyはタプルのリストに65780要素を含んでいます。次のステップは、xor_minの各要素に対して、XOR演算がキーリストのタプルで行われることです。これは私が問題を抱えている部分です。ここに私の全体のコードは次のとおりです。
def xor_list(xor_encrypted, max_key):
key = list(itertools.combinations(max_key, 5))
possible_xor = ['' for x in range(0, len(key))]
i = 0
for element in range(0, len(max_key)):
if i == 5:
i = 0
possible_xor[element] = operator.xor(int(xor_encrypted[i]), int(key[element][i]))
i+=1
return possible_xor
alph = list(string.ascii_lowercase)
bin_key = convert_to_bin((convert_to_ascii(alph)))
xor_min = ["49","29","1","67","42"]
converted_min = convert_to_bin(xor_min)
プリント(xor_list(converted_min、bin_key))
私が手に出力されている:私はバイナリにint型に変換する必要があります知っている[1140048, 1106871, 1100010, 2067215, 1132123, 1140048, 1106871, 1100010, 2067215, 1132452, 1140048, 1106871, 1100010, 2067215, 1140073, 1140048, 1106871, 1100010, 2067215, 1145162, 1140048, 1106871, 1100010, 2067214, 1132122, 1140048, '', '', '', '', '',.........]
が、私ならばoperator.xrのbin関数を使用します。エラーメッセージが表示されます。
possible_xor[element] = operator.xor(bin(int(xor_encrypted[i])), bin(int(key[element][i])))
TypeError: unsupported operand type(s) for ^: 'str' and 'str'
ご質問/ご要望がありましたら、お知らせください。また、他の/より良い解決策がある場合は、共有することを恐れないでください。復号化された5文字の結果で、私は何が意味をなされるかを見るためにそれらをスキミングします。それはリンクまたは英語の単語の始まりでなければなりません。
あなたがアイテムを変換する理由を私は理解していません'xor_min'をバイナリ文字列に変換し、その文字列を' int(xor_encrypted [i]) 'で10進数として扱います。また、 'itertools.combinations'はソートされた組み合わせを反復せずに作成します。あなたが_really_長さ5のすべての可能な組み合わせをリストや文字列 'a'から求めたいなら、デカルト積が必要です:' product(a、repeat = 5) '。 26文字の場合、 '26 ** 5 = 11881376'の組み合わせが異なります。したがって、出力をリストに格納するのではなく、 'product' iterableを直接反復することが最善の方法です。 –