2017-01-24 3 views
2

this fileの60文字の文字列のうちの1つが、単一文字XORで暗号化されています。1文字のXOR暗号の検出

見つけます。

#3からあなたのコードが役立つはずです。)

課題は、XORは暗号化され、ちんぷんかんぷんとは何かされているファイルの行を見つけることです。暗号化された1行があります。各行は60文字でなければなりません(58文字の行が1つ見つかりません)。

なんらかの理由で、私は58文字の行に59文字と最後の行につき60文字を読みます。どうしてこれなの?私はそれが新しい行の文字だと思ったが、私がline[0:-1]を使用したとき、私は復号化に成功しなかった。ここで

が私のpythonのコードです:すべての

import binascii 

def XORBreak(h): 
    en = binascii.unhexlify(h) 
    for key in range(256): 
     de = ''.join(chr(b^key) for b in en) 
     if de.isprintable(): 
      print(de) 

with open("TestFile_Challenge04_CSIS463.txt") as f: 
    for line in f: 
     XORBreak(line) 
+0

'line'に改行が含まれています。改行を削除するには 'line.rstrip(" \ n ")'を実行します。 –

+0

本当です。ごめんなさい。私は@AnttiHaapalaのリンクを投稿しました –

+0

ありがとうございました@ Jean-FrançoisFabre –

答えて

0

まず、あなたは.strip、例えばを使用して空白(改行など)を取り除く必要があります。

for line in file 
    xor_decrypt(line.strip()) 

代わりに盲目的に最後の文字を削除します行の


は今、あなたのコードはほとんど動作しますが、それが理由で、正しい文字列を検索するために失敗します、

>>> '\n'.isprintable() 
False 

したがって含む任意の文字列のisprintable'\n'はない印刷可能です改行はFalseを返します。

代わりにany(c.isprintable() or c == '\n' for c in de)のようなものを使用できます。

+0

スペースが含まれていると思います。彼らは最後の挑戦にあった。 –

+0

私はあなたが言っていることを見ていますが、 'XORBreak(line.rstrip( "\ n"))'は任意の最後の文字ではなく改行文字を取り出します。 –

関連する問題