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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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 :)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten