+1 Daumen
747 Aufrufe

Kennt sich jemand mit Netzsicherheit und Programmieren in Python aus?

Ich habe die Aufgabe, dass ich einen Hashwert gegeben habe, welches aus Hexadezimal besteht "dbd2bf69993e05f2775989a5939586be" und das zu suchende Passwort, welches aus 14 Ziffern besteht geben muss

Dabei haben wir auch das Skript bekommen:

import hashlib

def md5(password, constant):
    m = hashlib.md5()
    m.update(str.encode(password + constant))
    return m.hexdigest()

print(md5("password", "constant"))

Wir sollen jetzt der Programmiersprache irgendwie herausfinden wie wir das Passwort bekommen.

Problem:

Ich hab noch nie mit Python gearbeitet und weiß daher nicht, wie ich das machen soll oder ob es einen Code dafür gibt.

Avatar von
Dabei haben wir auch das Skript bekommen.

Dabei wurde auch erläutert, in welchem Zusammenhang das Skript mit dem Problem steht. Nenne uns diesen Zusammenhang!

1 Antwort

+1 Daumen
 
Beste Antwort

Aloha :)

Du sollst offenbar eine Brute-Force-Attacke programmieren. Das heißt, du musst in einer Schleife alle 14-ziffrigen Passwörter generieren. Dann für jedes Passwort die Funktion md5() aufrufen und den Rückgabewert dieser Funktion mit dem hexadezimalen Hash-Wert vergleichen. Wenn beide gleich sind, hast du das Passwort gefunden.

Avatar von

Vielen Dank für die Antwort :-)

Ihre Antwort hilft mir schon sehr, aber können Sie mir auch mit dem Code für Python helfen ?

Ich habe leider sehr geringe Erfahrung mit Programmieren bzw. ich bin gerade dabei es zu lernen, nur haben wir bisher noch nie mit Python gearbeitet...

Können Sie  mir dabei helfen ? :-)

Ich habe dir einen Beispiel-Code für das Bruteforce eines 4-stelligen-Passworts geschrieben:

import hashlib

# targetpw = "dbd2bf69993e05f2775989a5939586be"
targetpw = "51c48f147d4f4a3773cbbd690ae99a84" # is "abcd"

def md5(password, constant):
    m = hashlib.md5()
    m.update(str.encode(password + constant))
    return m.hexdigest()

i = 0
j = 0
k = 0
l = 0
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
found = False

for i in letters:
  if(found):
    break
  else:
    for j in letters:
      if(found):
        break
      else:
        for k in letters:
          if(found):
            break
          else:
            for l in letters:
              password = i+j+k+l
              print(str(i) + ": "+password)
              hashpassword = (md5(password, "constant"))
              if(hashpassword == targetpw):
                print("Passwort gefunden! Es lautet: "+password)
                found = True
                break



Wahrscheinlich nicht das Eleganteste, aber ein Startpunkt.

Das Problem ist nicht das Programm, sondern die extreme Langsamkeit von Python. Es wird ewig dauern, in Python \(10^{15}\) mögliche 14-ziffrige Passwörter zu prüfen. Das Skript dazu sieht so aus:

import hashlib

def md5(password, constant):
    m = hashlib.md5()
    m.update(str.encode(password + constant))
    return m.hexdigest()

def find14DigitPw( targetHex ) :
    pw_int= 0
    while pw_int < 10**15 :
        if targetHex == md5(str(pw_int).zfill(14),""):
            break
        pw_int+= 1
    if (pw_int == 10**15) :
        return -1
    return pw_int

pw_int= find14DigitPw( 0xdbd2bf69993e05f2775989a5939586be )
print(pw_int)
Wenn in der Aufgabenstellung noch irgendetwas über das Passwort steht, wäre das sehr hilfreich. Ist das Passwort maximal 14 Ziffern lang oder kann es auch kürzer sein? Ich fülle ein zu kurzes Passwort mittels ".zfill(14)" nämlich auf 14 Ziffern links mit Nullen auf. Das muss man eventuell anpassen.

Was ist mit der Konstanten, die bei der Funktion md5() als Parameter mitgeliefert werden muss? Was ist über diese bekannt? Ich habe da jetzt einen Leerstring eingetragen. Das muss man eventuell auch noch anpassen.

Vielen Dank :-) Das hilft mir sehr ! :))

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community