Seite 1 von 1

Vorschau: Einfacher Syntax Fehler (glaube ich)

Verfasst: Samstag 17. April 2021, 11:39
von BarackObama
Das ist mein erster Code, den ich geschrieben bzw. kopiert habe. Er stammt aus diesem YouTube Video: https://www.youtube.com/watch?v=WmgD2pPhj3Q Ich bekomme beim Ausführen immer einen
Error:

Code: Alles auswählen

C:\Users\***\Downloads>python search.py
  File "search.py", line 9
    if to_check in line:
                       ^
IndentationError: unindent does not match any outer indentation level

C:\Users\***\Downloads>




Mein (bzw. der des YouTubers):

Code: Alles auswählen

import sys, hashlib
sys.argv[1]
message_digest = hashlib.sha1()
message_digest.update(bytes(pwd, encoding="utf-8"))
to_check = message_digest.hexdigest().upper()
leaked = False
with open("sha1_hash.txt") as file:
     for line in file:
    if to_check in line:
         print(f"F*ck dis shit, das Passwort wurde {line.split(":")[1].strip()} geleakt...ÄNDERN!!!")
         leaked = true
         break
    if not leaked:
        print("Yippiyayay Schweinebacken! Keine Leaks! Du bist ein Meister der Verschlüsselung")

Ich weiß nicht, wie welche Zeilen eingerückt sein müssen oder wo Leerzeichen hin müssen.

Wie gesagt, ist das mein erster code, den ich nur kopieren wollte, um zu checken, wie sicher meine Passwörter sind. Wenn ihr mir weiterhelfen könnt, freu ich mich. Wenn euch das zu "einfach" oder was auch
immer ist, ist das natürlich auch nicht schlimm.
MfG

Re: Vorschau: Einfacher Syntax Fehler (glaube ich)

Verfasst: Samstag 17. April 2021, 12:07
von Sirius3
Es ist wirklich wichtig, alles exakt so abzuschreiben, wie es im Video auch gezeigt wird. Also jeder Buchstabe und jedes Leerzeichen.
Alles was gleich weit eingerückt ist, gehört zu einem Block, so dass Python z.B. weiß, was alles bei der for-Schleife wiederholt werden muß.
Und auch das `pwd` fehlt bei Dir in der zweiten Zeile.

Re: Vorschau: Einfacher Syntax Fehler (glaube ich)

Verfasst: Samstag 17. April 2021, 18:02
von BarackObama
Okay vielen Dank schon mal für die Hilfe. Ich habe jetzt alles genau eingerückt, wie im Video, jedoch meckert er jetzt an einer anderen Stelle wegen der Syntax:

Code: Alles auswählen

C:\Users\***\Downloads>python search.py
  File "search.py", line 12
    print(f"Fck dis shit, das Passwort wurde {line.split(":")[1].strip()} Mal geleakt...ÄNDERN
                                                          ^
SyntaxError: invalid syntax

C:\Users\***\Downloads>
Mein Code:

Code: Alles auswählen

import sys, hashlib

pwd = sys.argv[1]
message_digest = hashlib.sha1()
message_digest.update(bytes(pwd, encoding="utf-8"))
to_check = message_digest.hexdigest().upper()

leaked = False
with open("sha1_hash.txt") as file:
    for line in file:
        if to_check in line:
            print(f"Fck dis shit, das Passwort wurde {line.split(":")[1].strip()} Mal geleakt...ÄNDERN
            leaked = False
            break
    if not leaked:
        print("Yippiyayay Schweinebacken! Keine Leaks! Du bist ein Meister der Verschlüsselung")
In dem Video sieht der Code genau so aus. Deswegen weiß ich nicht, was der Fehler ist.
MfG

Re: Vorschau: Einfacher Syntax Fehler (glaube ich)

Verfasst: Samstag 17. April 2021, 18:07
von Sirius3
Ja, im Video werden zwar einfache Anführungszeichen verwendet, aber genauso falsch.
Bei Verschachtelung muß man einmal Einfache und einmal Doppelte Anführungszeichen verwenden.

Code: Alles auswählen

            print(f"Fck dis shit, das Passwort wurde {line.split(':')[1].strip()} Mal geleakt...")
Oder besser gleich gar nicht so komplizierte Ausdrücke in f-Strings einbauen.

Code: Alles auswählen

            count =  line.split(":")[1].strip()
            print(f"Fck dis shit, das Passwort wurde {count} Mal geleakt...")

Re: Vorschau: Einfacher Syntax Fehler (glaube ich)

Verfasst: Samstag 2. November 2024, 23:46
von __blackjack__
`message_digest` ist kein passender Name für ein Objekt das den *berechnet*. `to_search` sollte eigentlich `message_digest` heissen.

`leaked` ist übeflüssig, weil es ``else`` zu Schleifen gibt.

Das Video ist nicht mehr Online, darum rate ich mal das die Zeilen in der Datei die Form "<digest>: <count>" haben und das ``in`` deshalb der falsche Testoperator ist.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
from hashlib import sha1
import sys


def main():
    if len(sys.argv) != 2:
        print(f"Usage: {sys.argv[0]} PASSWORD")
        return

    searched_digest = sha1(sys.argv[1].encode("utf-8")).hexdigest().upper()
    with open("sha1_hash.txt", encoding="ascii") as lines:
        for line in lines:
            digest, _, count_text = line.partition(":")
            count = int(count_text)
            if digest == searched_digest:
                print(
                    f"F*ck dis shit, das Passwort wurde {count} mal geleakt..."
                    f" ÄNDERN"
                )
                break
        else:
            print(
                "Yippiyayay Schweinebacken! Keine Leaks! Du bist ein Meister"
                " der Verschlüsselung"
            )


if __name__ == "__main__":
    main()