MD5-Hash in Python

TJ Lerias 18 Juli 2021
  1. Was ist Hasch?
  2. Was ist MD5?
  3. Python hashlib-Modul
  4. Verwendung von den MD5-Algorithmus in Python
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.