Challenge #6Взломать Повторяющаяся-Key гаммирование
В этом 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))
Я обновил мою проблему. Не могли бы вы снова взглянуть на него? @Shakkhar –