1
This commit is contained in:
52
set1/challenge6.py
Normal file
52
set1/challenge6.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from Crypto.Util.number import *
|
||||
import base64
|
||||
import statistics
|
||||
|
||||
def hamming_distance(str1: str, str2: str) -> int:
|
||||
if len(str1) != len(str2):
|
||||
raise ValueError("Input strings must have the same length")
|
||||
|
||||
hamming = bin(bytes_to_long(str1) ^ bytes_to_long(str2))
|
||||
distance = 0
|
||||
for one in hamming:
|
||||
if one == '1':
|
||||
distance = distance + 1
|
||||
|
||||
return distance
|
||||
|
||||
|
||||
# a = b'this is a test'
|
||||
# b = b'wokka wokka!!!'
|
||||
# print(hamming_distance(a,b))
|
||||
|
||||
with open("set1/6.txt",'r') as file:
|
||||
lines = file.readlines()
|
||||
base64_str = "".join(line.strip() for line in lines)
|
||||
cipher = base64.b64decode(base64_str)
|
||||
|
||||
# variances = [99]
|
||||
# for key_size in range(2,40):
|
||||
# # print('key_size',key_size)
|
||||
# a = hamming_distance(cipher[0: key_size], cipher[key_size:2 * key_size]) / key_size
|
||||
# b = hamming_distance(cipher[2 * key_size: 3 * key_size], cipher[3 * key_size: 4 * key_size]) / key_size
|
||||
# c = hamming_distance(cipher[4 * key_size: 5 * key_size], cipher[5 * key_size: 6 * key_size]) / key_size
|
||||
# d = hamming_distance(cipher[6 * key_size: 7 * key_size], cipher[7 * key_size: 8 * key_size]) / key_size
|
||||
# data = [a, b, c, d]
|
||||
# variances.append(statistics.variance(data))
|
||||
|
||||
# print(variances.index(min(variances)))
|
||||
|
||||
for keysz in range(2, 40):
|
||||
print(keysz, hamming_distance(cipher[:keysz], cipher[keysz: 2 * keysz]) * 1.0 / keysz, sum([hamming_distance(cipher[keysz * i:keysz * i + keysz], cipher[: keysz]) for i in range(10)]) * 1.0 / keysz)
|
||||
|
||||
|
||||
|
||||
|
||||
# key_size = 4
|
||||
# for key_size in range(1,40):
|
||||
# print(len(cipher) / key_size)
|
||||
# for i in range(int(len(cipher) / key_size)):
|
||||
# for key in range(255):
|
||||
# decrypted = "".join(chr(b ^ key) for b in cipher[i * key_size: i * key_size + key_size])
|
||||
# print(decrypted)
|
||||
|
||||
Reference in New Issue
Block a user