Seite 1 von 1

MD5 Summe überprüfen...

Verfasst: Dienstag 19. Dezember 2006, 09:41
von jens
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)

Verfasst: Dienstag 19. Dezember 2006, 10:44
von jens
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)

Verfasst: Dienstag 19. Dezember 2006, 17:58
von Leonidas
Warum werfen deine Exceptions so abgehackte Texte wie "len error" oder "char error"? Es heißt im Englischen immer noch "length" und "character".

Verfasst: Dienstag 19. Dezember 2006, 20:31
von BlackJack
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.

Verfasst: Mittwoch 20. Dezember 2006, 13:57
von jens
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 :)