Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

17.09.2014, 19:08

[Python] MD5 Hash vergleichen [GELÖST]

Hallo,
Ich habe gerade einem Code gearbeitet der von allen Dateien in einem Ordner einen MD5 Hash erstellen soll.
Und diesen dann mit einer List von MD5 Hash vergleichen soll. Welche auf einen Server hinterlegt sind.
Es funktioniert soweit, nur wird nicht jeder Hash mit der list verglichen.

Der Code:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#-----------------------------------------------------------------------------------------------------------------------------------
# File: check_version.py
# Beschreibung: Erstellt von allen Dateien im Game Ordner einen MD5 Hash und vergleicht diese mit den auf dem Server hinterlegten
# Datum: 16.09.2014
# Programmierer: Daniel
# Externer Code: def digest von http://www.computerbase.de/forum/showthread.php?t=1175346
#-----------------------------------------------------------------------------------------------------------------------------------
import os
import sys
import hashlib
import urllib

UpdatetServerUrl = "http://80.246.63.50/Update/HashList.txt"

def digest(file):
    '''digest takes 1 file as argument and returns its md5 sum
    Source code taken from StackOverflow
    
    '''
    md5 = hashlib.md5()
    with open(file,'rb') as f: 
        for chunk in iter(lambda: f.read(8192), b''): 
             md5.update(chunk)
            
    print(md5.hexdigest())
    return md5.hexdigest()

def CheckHash(md5sum):
    if md5sum in RemoteMD5List:
        print("Richtig")
        return True
    else:
        print("Falsch")

def createHashList(path):

    for path, _, filenames in os.walk(path):
        for file in filenames:
            filepath = os.path.join(path,file)
            md5sum = digest(filepath)
    CheckHash(md5sum)
            

UpdatetServer = urllib.urlopen( UpdatetServerUrl )
RemoteMD5List = UpdatetServer.read()
UpdatetServer.close()
ToCreateHash = createHashList(os.path.dirname(os.path.abspath(sys.argv[0])))

# check_version.py


Die Print Ausgabe:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
0f599a03ce48b49554c835f90742967d
bfbc0b11103e2a61f91f175db45d859e
2ad57d1e3cbb8c88685068bd163b43a4
1449d83db24249377e0e2e0e5b839bba
d41d8cd98f00b204e9800998ecf8427e
f47d581c5a00fce8fe0b9e61807fa317
303374981b27eec5fe6b0ad4ee825093
Richtig
665748c24da657525717cec85efa44ca
16aedcfb14a11a46360fb8ab8af8c33f
Falsch
eeceb8f1fc04fbcf26edf68ca7ca8550
4a278459945a306d6d707f6f14512eb2
5a15cf77bc149324adc84b8d6f7c13ec
Richtig
710480a2cb569ab2b3d6f2c4cb8a1a35
Falsch
fcaefc2124bf4c8d6aa6a20b25fdb3bf
Falsch
3a9c17fedd045d67b3297de7407b0ca4
2eaba7f94e79fac3dd75428eea301da4
38367656a1f1ac9a2bb32cd0e5673ace
b3fd51c80b1061b952b2b3ad677b5821


Jemand eine Idee warum nicht alle verglichen werden?

Vielen dank für eure Hilfe

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Lajah250« (18.09.2014, 17:31)


2

17.09.2014, 19:17

Zeile 41; überprüf deine Einrückung.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

3

17.09.2014, 19:27

Danke für den Tipp, aber wenn ich die Zeile anders einrücke bekomme ich einen Error.

Quellcode

1
2
3
CheckHash(md5sum)
^
IndentationError: unexpected indent

4

18.09.2014, 17:31

Nochmal danke für den Tipp mit der einrückung.
Das war der Fehler.
Habe auch herausgefunden warum er zuerst die einrückung nicht mochte.
Hatte die Zeilen darüber die einrückung per Space gemacht und nicht mit Tab wie in Line 41.

5

18.09.2014, 20:39

Ein Einrücken mit vier Leerzeichen ist de facto Standard in Python. Darüber hinaus sollte kein Code auf Modulebene existieren (Ausnahmen wären Konstanten). Verwende das s. g. Main-Idiom. So kannst Du Dein Modul auch im interaktiven Interpreter testen.

Darüber hinaus sollten nur Klassen mit einem Großbuchstaben beginnen. Alles andere klein (lowercase_underscore).

Pluspunkte gibts für "with" ;)

Grüße ... bwbg

Zitat

Ich bin nicht der Messias.
Ich sage, du bist es, Herr. Und ich muss es wissen, denn ich bin schon einigen gefolgt.

https://bitbucket.org/bwbg

6

19.09.2014, 17:54

Danke für den tipp

Werbeanzeige