2014-12-24 1 views
-1

Привет им пытаются зашифровать код, то попытаться найти ключ для кода, но не получить лучшие результаты с не знаю, что я могу сделать здесьПопытка взломать ключ XOR для проекта (python2.7)

from itertools import izip, cycle 
import itertools 
import binascii 
a = 0 
message = "Hello friend" 
length = len(message) 
key = "s" 
c = 0 
def xor_crypt_string(data, key): 
    return "".join(chr(ord(x)^ord(y)) for (x,y) in izip(data, cycle(key))) 

encrypt = xor_crypt_string(message, key) 

while (c <= length): 
    res = itertools.permutations('abcdefghijklmnopqrstuvwxyz', c) # 3 is the length of your result. 
    c = c + 1 
    for i in res: 
     keys = ''.join(i) 
     decrypt = xor_crypt_string(encrypt, keys) 
     for d in decrypt: 
      if (ord(d) > 47 and ord(d) < 58) or (ord(d) == 32) or (ord(d) > 64 and ord(d) < 91) or (ord(d) > 96 and ord(d) <123): 
       print decrypt 
      else: 
       a = 0 
+1

'ord (d)> 47 и ord (d) <58' лучше написано' 47 Eric

+0

Вместо того, чтобы помещать в свой заголовок, есть тег для python2.x. Вы можете использовать это! –

ответ

1

Я подозреваю, что вы хотите позвонить all, а не регулярному циклу for, когда вы проверяете, действительно ли ваше дешифрование. Это будет проверять все символы и печатать только расшифровку, если все они действительны:

if all(x == 32 or 47 < x < 58 or 64 < x < 91 or 96 < x < 123 
     for x in (ord(c) for c in decrypt)): 
    print decrypt 

Вы можете сделать тест более ясный, чем я выше, используя строку или набор тест членства, а не явно проверять порядковый диапазоны (например, if all(c in string.printable for c in decrypt) только немного шире, чем ваш тест).