In [2]:
myinput = 'ihaygndm'
In [3]:
import hashlib
In [140]:
def repetitions(mystr, n, m):
ns = []
ms = []
i = 0
j = 0
while i < len(mystr) - n + 1:
if mystr[i:i+n] == mystr[i] * n:
if mystr[i] not in ns:
ns.append(mystr[i])
if mystr[i:i+m] == mystr[i] * m:
if mystr[i] not in set(ms):
ms.append(mystr[i])
i += n
else:
i += 1
return ns, ms
def hashkey(myinput, k):
mystr = myinput + str(k)
hsh = hashlib.md5(mystr.encode('utf-8')).hexdigest()
return hsh
def generate_keys(myinput, hashkey_function, n, m):
white = []
key_ns = []
key_ms = []
k = 0
while len(white) < 64:
hsh = hashkey_function(myinput, k)
ns, ms = repetitions(hsh, 3, 5)
if len(ns) > 0:
key_ns.append((k, ns[0]))
if len(ms) > 0:
for char in ms:
key_ms.append((k, char))
for ns_tuple in key_ns:
for ms_tuple in key_ms:
if (ns_tuple[1] == ms_tuple[1]) and (0 < ms_tuple[0] - ns_tuple[0] < 1001):
if ns_tuple[0] not in white:
white.append(ns_tuple[0])
k += 1
return sorted(white)
In [142]:
sorted_indices1 = generate_keys(myinput, hashkey, 3, 5)
In [143]:
sorted_indices1[63]
In [144]:
def hashkey_stretched(myinput, k, n):
mystr = myinput + str(k)
hsh = hashlib.md5(mystr.encode('utf-8')).hexdigest()
for i in range(n-1):
hsh = hashlib.md5(hsh.encode('utf-8')).hexdigest()
return hsh
def new_hashkey(myinput, k):
return hashkey_stretched(myinput, k, 2017)
In [146]:
hashkey_stretched('abc', 0, 2017)
Out[146]:
In [147]:
sorted_indices2 = generate_keys('abc', new_hashkey, 3, 5)
In [148]:
sorted_indices[63]
Out[148]:
In [149]:
sorted_indices3 = generate_keys(myinput, new_hashkey, 3, 5)
In [150]:
sorted_indices3[63]
Out[150]: