1
Challenge #6私が現在働いている。このCryptopalsチャレンジ中の繰り返しキーXOR暗号
を破ります。私は正しいHamming関数と実現可能な(おそらく間違っている)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 –