MD5-Hash in Python
Dieser Artikel zeigt, wie man den MD5-Hash mit dem Python-Modul hashlib
verwendet.
Was ist Hasch?
Ein Hash ist eine Funktion, die Daten variabler Länge nimmt und in eine feste Länge umwandelt. Der von einer Hashfunktion zurückgegebene Wert wird als Hashwert, Hashcode oder Digest bezeichnet. Die Hashwerte werden normalerweise verwendet, um eine Tabelle mit fester Größe zu indizieren, die als Hashtabelle bezeichnet wird.
Was ist MD5?
Der MD5 Message-Digest-Algorithmus ist eine beliebte Hash-Funktion, die einen 128-Bit-Hash-Wert erzeugt. Ursprünglich als kryptografische Hash-Funktion konzipiert, wird sie heute aufgrund mehrerer Sicherheitsprobleme und Schwachstellen häufig zur Überprüfung der Datenintegrität verwendet.
Python hashlib
-Modul
Die Python-Standardbibliothek besteht aus einem Modul, das viele verschiedene sichere Hash- und Message-Digest-Algorithmen namens hashlib
implementiert. Es kann auch zusätzliche Algorithmen enthalten, die abhängig von der OpenSSL-Bibliothek verfügbar sind, die Python auf Ihrer Plattform verwendet.
Um die Hashing-Algorithmen zu verwenden, importieren Sie das Modul hashlib
.
import hashlib
Wir können jetzt die von diesem Modul unterstützten Hashing-Algorithmen verwenden. Um die verfügbaren Hash-Algorithmen im laufenden Python-Interpreter zu überprüfen, verwenden Sie das Konstantenattribut algorithms_available
.
import hashlib
print(hashlib.algorithms_available)
Ausgabe:
{'md5', 'blake2s', 'sha256', 'sha384', 'sha3_512', 'blake2b', 'md4', 'md5-sha1', 'sha512_224', 'sha224', 'sha3_224', 'ripemd160', 'sha3_256', 'shake_256', 'sm3', 'shake_128', 'sha3_384', 'sha1', 'sha512_256', 'whirlpool', 'sha512'}
Die obige Liste enthält die verfügbaren Algorithmen in hashlib
, einschließlich der verfügbaren Algorithmen von OpenSSL
Um die Hash-Algorithmen zu überprüfen, die von diesem Modul garantiert auf allen Plattformen unterstützt werden, verwenden Sie das konstante Attribut algorithms_guaranteed
.
import hashlib
print(hashlib.algorithms_guaranteed)
Ausgabe:
{'sha3_256', 'sha256', 'sha3_224', 'sha224', 'blake2s', 'sha3_512', 'shake_128', 'sha512', 'sha3_384', 'shake_256', 'md5', 'blake2b', 'sha384', 'sha1'}
Hinweis: md5
steht in der Liste von algorithms_guaranteed
, aber einige FIPS-konforme Upstream-Anbieter bieten einen Python-Build an, der dies ausschließt.
Verwendung von den MD5-Algorithmus in Python
Um den md5-Algorithmus zu verwenden, verwenden wir den md5()
-Konstruktor und füttern das Hash-Objekt über die Methode update()
mit byteähnlichen Objekten oder übergeben die Daten als Parameter des Konstruktors.
Um den Hash-Wert zu erhalten, verwenden Sie die Methode digest()
, die einen Objekt-Digest bytes
der dem Hash-Objekt zugeführten Daten zurückgibt.
import hashlib
md5_hash = hashlib.md5()
md5_hash.update(b"Hello World")
print(md5_hash.digest())
Ausgabe:
b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'
Sie können die Daten auch als Parameter an den Konstruktor übergeben und den Hash-Wert abrufen
import hashlib
print(hashlib.md5(b"Hello World").digest())
Ausgabe:
b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'
Ähnlich der Methode digest()
können Sie auch hexdigest()
verwenden, die ein String-Objekt des Digests zurückliefert, das nur hexadezimale Ziffern enthält.
import hashlib
md5_hash = hashlib.md5()
md5_hash.update(b"Hello World")
print(md5_hash.hexdigest())
Ausgabe:
b10a8db164e0754105b7a99be72e3fe5
Beachten Sie, dass ein b
vor dem String-Literal steht, das an die Methode update()
übergeben wird. Es wird verwendet, um eine Instanz des Typs bytes
anstelle des Typs str
zu erstellen. Denn die Hashing-Funktion akzeptiert als Parameter nur eine Folge von Bytes. Die Übergabe von String-Objekten an die Methode update()
wird nicht unterstützt.
Sie können die Methode update()
auch mehrfach aufrufen, was einem einzigen Aufruf entspricht, bei dem alle Argumente verkettet sind.
import hashlib
first_hash = hashlib.md5()
first_hash.update(b"Hello World, Hello Python")
print(first_hash.hexdigest())
second_hash = hashlib.md5()
second_hash.update(b"Hello World,")
second_hash.update(b" Hello Python")
print(second_hash.hexdigest())
Ausgabe:
b0f2921c8c0e63898b0388777908893a
b0f2921c8c0e63898b0388777908893a
Zusammenfassend können wir den md5
-Hash-Algorithmus über das hashlib
-Modul verwenden, das mit Daten gefüttert werden kann, indem es als Parameter des md5()
-Konstruktors übergeben wird oder die Methode update()
verwendet wird. Wir können den Hash-Wert mit der Methode digest()
erhalten, die ein bytes
-Objekt der Methode digest()
oder hexdigest()
zurückgibt, die ein String-Objekt des Digests zurückgibt, das nur hexadezimale Ziffern enthält.