MD5 Summe überprüfen...

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.
Antworten
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 19. Dezember 2006, 09:41

Vorschläge um einfacher zu testen, ob man wahrscheinlich eine MD5 hexdigest Summe hat, oder nicht?

Code: Alles auswählen

from string import ascii_lowercase, digits

class MD5Checker(object):
    def __init__(self):
        self.allow_chars = set(ascii_lowercase)
        self.allow_chars.update(digits)

    def check(self, md5value):
        """
        Überprüft ob es sich um eine MD5-hexdigest Summe handeln könnte
        wirft einen ValueError, wenn es keine MD5 Summe sein kann
        """
        if len(md5value) != 32:
            raise ValueError("len error")

        md5value_set = set(md5value)
        if not md5value_set.issubset(self.allow_chars):
            diff = md5value_set.difference(self.allow_chars)
            diff = ", ".join(diff)
            raise ValueError("Char error. (Char %s not allowed.)" % diff)



checker = MD5Checker()

import md5
testmd5 = md5.new("test").hexdigest()
print testmd5
checker.check(testmd5)

testmd5 = "098f6bc$4621d3_3cade4e8326&7b4f6"
print testmd5
checker.check(testmd5)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 19. Dezember 2006, 10:44

Ah, gerade gesehen: Es gibt auch string.hexdigits ;)

Aktualisiert:

Code: Alles auswählen

from string import hexdigits

class MD5Checker(object):
    def __init__(self):
        self.allow_chars = set(hexdigits)

    def check(self, md5value):
        """
        Überprüft ob es sich um eine MD5-hexdigest Summe handeln könnte
        wirft einen ValueError, wenn es keine MD5 Summe sein kann
        """
        if len(md5value) != 32:
            raise ValueError("len error")

        md5value_set = set(md5value)
        if not md5value_set.issubset(self.allow_chars):
            diff = md5value_set.difference(self.allow_chars)
            diff = ", ".join(diff)
            raise ValueError("Char error. (Char %s not allowed.)" % diff)



checker = MD5Checker()

import md5
testmd5 = md5.new("test").hexdigest()
print testmd5
checker.check(testmd5)

testmd5 = "098f6bc$4621d3_3cade4e8326&7b4f6"
print testmd5
checker.check(testmd5)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 19. Dezember 2006, 17:58

Warum werfen deine Exceptions so abgehackte Texte wie "len error" oder "char error"? Es heißt im Englischen immer noch "length" und "character".
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Dienstag 19. Dezember 2006, 20:31

Warum ist das eine Klasse und keine Funktion? Warum hat die Funktion keinen Rückgabewert sondern Ausnahmen? Und muss es wirklich so detailliert sein? Wenn nicht kannst Du einfach die Länge prüfen und mit ``int(x, 16)`` versuchen eine Zahl daraus zu machen. Wenn das nicht klappt, dann war es keine Hexzahl.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 20. Dezember 2006, 13:57

BlackJack hat geschrieben:``int(x, 16)``
Das ist ein super Tipp! Dann schmeiße ich die ganze Klasse weg ;)

EDIT: Wobei, die länge sollte ich wohl besser dennoch prüfen :)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten