diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..757fee3 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.idea \ No newline at end of file diff --git a/script.py b/script.py index ff99e66..06d7767 100644 --- a/script.py +++ b/script.py @@ -1,17 +1,30 @@ -import md5 +#-*-encoding:utf-8-*- -renmich_1 = 'renmich1123376350383621786626'; -renmich_2 = 'renmich3700873222361195459231'; +from hashlib import md5 +from binascii import hexlify -def rmhash(input): - return md5.new(md5.new(input).digest()).digest()[1:3]; +renmich_1 = 'renmich1123376350383621786626'.encode(); +renmich_2 = 'renmich3700873222361195459231'.encode(); + +def rmhash(input,n=1): + tmp = input; + for i in range(n): + x = md5(); + x.update(tmp); + y = md5(); + y.update(x.digest()) + tmp = y.digest()[1:7] + return tmp; + +def to_string(b): + return hexlify(b).decode(); def find_colision(input): tortoise=input; hare=input; i=0; - dlugosc_cyklu = 0; + dlugosc_cyklu = 1; pierwsze_wystapienie_cyklu = 0; while i==0 or tortoise!=hare: @@ -22,26 +35,32 @@ def find_colision(input): hare=rmhash(hare); hare=rmhash(hare); - print("Zolw: "+tortoise+" Zajac "+hare) - + print("{}: zolw={} zajac={} ".format(i,to_string(tortoise), to_string(hare))) + + # Zolw na poczatek + tortoise = input; + + while tortoise != hare: + previous_tortoise = tortoise; + tortoise = rmhash(tortoise); + hare = rmhash(hare) + pierwsze_wystapienie_cyklu += 1; + #Przesuwam zajaca o jedno pole do przodu - hare=rmhash(hare); + hare=rmhash(tortoise); while tortoise!=hare: previous_hare = hare; hare=rmhash(hare); dlugosc_cyklu+=1; - - print("Zajac jest na polu "+hare+" a byl na "+previous_hare) - - #Zolw na poczatek - tortoise = input; - - while tortoise!=hare: - previous_tortoise = tortoise; - tortoise=rmhash(tortoise); - pierwsze_wystapienie_cyklu+=1; - - print("Zolw jest na polu "+tortoise+" a byl na "+previous_tortoise) - print("Dlugosc cyklu: "+str(dlugosc_cyklu)) - print("Pierwsze wystapienie cyklu: "+str(pierwsze_wystapienie_cyklu)) \ No newline at end of file + + print("Zajac jest na polu {} a byl na {}".format(to_string(hare),to_string(previous_hare))) + print("Zolw jest na polu {} a byl na {}".format(to_string(tortoise),to_string(previous_tortoise))) + print("Dlugosc cyklu: {}; Pierwsze wystapienie cyklu {}".format(dlugosc_cyklu,pierwsze_wystapienie_cyklu)) + + collision_a = rmhash(input,pierwsze_wystapienie_cyklu-1); + collision_b = rmhash(input, pierwsze_wystapienie_cyklu + dlugosc_cyklu-1); + + print("Hash ciagow: {}, {} to {}".format(to_string(collision_a),to_string(collision_b),to_string(rmhash(collision_a)))) + + return(collision_a,collision_b); \ No newline at end of file