2017-01-26 20 views
1

Challenge #6Взломать Повторяющаяся-Key гаммирование

Challenge File

В этом Cryptopals вызов, который я в настоящее время работает над. У меня есть правильная функция Хэмминга и возможные (хотя возможно неправильные) функции FindKey и XOR.


До сих пор, у меня есть этот код ...

import base64 

def binary(n): 
    return '{0:08b}'.format(n) 

def Hamm(s1, s2): 
    d = 0 
    for c1, c2 in zip(s1, s2): 
     if c1 != c2: 
      b1 = binary(c1) 
      b2 = binary(c2) 
      for a, b in zip(b1, b2): 
       if a != b: 
        d += 1 
    return(d) 

def FindKey(b64_s): 
    key_dict = {} 
    low = 9999 
    previous = 0 
    for size in range(2, 40): 
     ham1 = b64_s[previous : size + 1] 
     ham2 = b64_s[size + 1 : size * 2 + 1] 
     low = Hamm(ham1, ham2)/size 
     key_dict = {low : size} 
     previous = size 
    return(key_dict[low]) 

def XOR(byte_string): 
    result = '' 
    key = max(byte_string, key=byte_string.count)^ord('e')\ 
    for b in byte_string: 
     result += chr(b^key) 
    print(result) 

# get base64 file 
b64_string = '' 
with open("TestFile_Challenge06_CSIS463.txt") as f: 
    for line in f: 
     b64_string = b64_string + str(line) 

XOR(base64.b64decode(b64_string)) 

ответ

2

Прочитайте то, что ты снова написал:

это число различных битов между двумя строками

Что вы делаете в своем коде, принимаете общее число символов, которые отличаются между двумя строками, а не бит.

Я изменил код немного исправить:

def Hamm(s1, s2): 
    d = 0 
    for ch1, ch2 in zip(s1, s2): 
     c1 = ord(ch1) 
     c2 = ord(ch2) 
     while c1 or c2: 
      b1 = c1 & 1 
      b2 = c2 & 1 
      d += b1^b2 
      c1 >>= 1 
      c2 >>= 1 
    return d 
+0

Я обновил мою проблему. Не могли бы вы снова взглянуть на него? @Shakkhar –

 Смежные вопросы

  • Нет связанных вопросов^_^