Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Wo liegt der Fehler?
Ich wollte ein Konsolenprogramm schreiben, welches den Dateinamen übergeben bekommt und daraufhin, md5, sha1 usw. berrechnet. Jedoch berrechnet er nicht den korrekten Wert. Ich poste einfach mal den Code. Was habe ich falsch verstanden?
import sys
import hashlib
datei = open(sys.argv[1],"r")
stdin = raw_input("Bitte geben Sie md5, sha1, sha256 oder sha512 an >>> ")
if stdin=='md5':
for dat in datei.read():
pass
print hashlib.md5(dat).hexdigest()
elif stdin=='sha1':
for dat in datei.read():
pass
print hashlib.sha1(dat).hexdigest()
elif stdin=='sha256':
for dat in datei.read():
pass
print hashlib.sha256(dat).hexdigest()
elif stdin=='sha512':
for dat in datei.read():
pass
print hashlib.sha512(dat).hexdigest()
else:
print "Bitte nur md5, sha1, sha256, sha512 angeben!!!"
datei.close()
Zuletzt geändert von Anonymous am Dienstag 3. August 2010, 17:25, insgesamt 1-mal geändert.
Grund:Quelltext in Python-Code-Tags gesetzt.
Erstens öffnest du die Dateien nicht im Binärmodus (geht mit "rb" statt "r") dann können komische Sachen mit den Zeilenumbrüchen passieren und zweitens berechnest du immer nur den Hashwert des letzten Buchstaben, lass die for-Schleife weg.
Vielleicht könntest du dir auch mal die update() Funktion ansehen: Momentan beförderst du ja den gesamten Dateiinhalt in den Speicher - das wird bei (sehr) großen Dateien zu Problemen führen.
Einen schönen Gruß,
brb
P.S.
Rein unix-philosophie-mäßig fände ich es auch netter, wenn man die zu verwendete Methode über einen Parameter bestimmen könnte. Lässt sich viel besser skripten
Barabbas hat geschrieben:
P.S.
Rein unix-philosophie-mäßig fände ich es auch netter, wenn man die zu verwendete Methode über einen Parameter bestimmen könnte. Lässt sich viel besser skripten
Und wenn man schon dabei ist, schadet das argparse bzw. optparse-Modul nicht
Hyperion hat geschrieben:Und wenn man schon dabei ist, schadet das argparse bzw. optparse-Modul nicht
http://docs.python.org/library/optparse.html hat geschrieben:Deprecated since version 2.7: The optparse module is deprecated and will not be developed further; development will continue with the argparse module.
Hyperion hat geschrieben:Und wenn man schon dabei ist, schadet das argparse bzw. optparse-Modul nicht
http://docs.python.org/library/optparse.html hat geschrieben:Deprecated since version 2.7: The optparse module is deprecated and will not be developed further; development will continue with the argparse module.
Das ist mir klar! Aber ich weiß ja nicht, welche Version der OP benutzt. 2.7 ist ja relativ neu... (daher habe ich optparse ja auch mit bzw. nachgestellt!)