Zufällig wie für irgendetwas? Oder für ein Objekt? Wenn Sie nur eine zufällige MD5 wollen, wählen Sie einfach einige Zahlen.
Samoz
Ich benenne Dateien vor dem Hochladen um und möchte einen Dateinamen wie diesen: timestamp_randommd5.extension Cheers!
Mistero
5
Sie können sie einfach in timestamp_randomnumber.ext umbenennen. Es gibt wirklich keinen Grund, warum md5 (Zufallszahl) besser wäre als die Zufallszahl selbst.
+1 für die Nichtberechnung eines relativ teuren Hashs aus einer Zufallszahl: Dieser Ansatz ist 5x schneller.
Nicolas Dumazet
11
+1 - sicherlich ist dies besser als meine Antwort, kann auch so verwendet werden: hex (random.getrandbits (128)) [2: -1] Dies gibt Ihnen die gleiche Ausgabe wie die hexdigest-Methode md5.
Jiri
1
Der Aufruf von random.seed () ist mehr oder weniger nutzlos.
tzot
2
Ich hätte os.urandom verwendet, weil der Wunsch nach einem MD5-Hash den Wunsch nach einem sicheren bedeuten könnte.
Unbekannt
9
So geht's os.urandom:''.join('%02x' % ord(x) for x in os.urandom(16))
FogleBird
97
Ich denke, was Sie suchen, ist eine universelle eindeutige Kennung. Dann ist die Modul-UUID in Python genau das, wonach Sie suchen.
import uuid
uuid.uuid4().hex
UUID4 gibt Ihnen eine zufällige eindeutige Kennung, die dieselbe Länge wie eine MD5-Summe hat. Hex wird als Hex-Zeichenfolge dargestellt, anstatt ein UUID-Objekt zurückzugeben.
Diese Art der hexadezimalen Codierung funktioniert in Python 3 nicht mehr.
Caramdir
1
Vielen Dank. Dies ist der beste Weg, um einen zufälligen Hash-Schlüssel zu erstellen.
Jake
7
funktioniert für 2.x und 3.x: binascii.hexlify (os.urandom (16))
Clay
44
Das secretsModul wurde in Python 3.6+ hinzugefügt. Es bietet kryptografisch sichere Zufallswerte mit einem einzigen Aufruf. Die Funktionen verwenden ein optionales nbytesArgument. Der Standardwert ist 32 (Bytes * 8 Bit = 256-Bit-Token). MD5 verfügt über 128-Bit-Hashes. Stellen Sie daher 16 für "MD5-ähnliche" Token bereit.
from hashlib import md5
plaintext = input('Enter the plaintext data to be hashed: ')# Must be a string, doesn't need to have utf-8 encoding
ciphertext = md5(plaintext.encode('utf-8').hexdigest())print(ciphertext)
Es sollte auch beachtet werden, dass MD5 eine sehr schwache Hash-Funktion ist. Es wurden auch Kollisionen gefunden (zwei verschiedene Klartextwerte führen zu demselben Hash). Verwenden Sie einfach einen zufälligen Wert für plaintext.
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806Antworten:
Ein md5-Hash ist nur ein 128-Bit-Wert. Wenn Sie also einen zufälligen Wert wünschen:
Ich verstehe den Punkt jedoch nicht wirklich. Vielleicht sollten Sie näher erläutern, warum Sie das brauchen ...
quelle
os.urandom
:''.join('%02x' % ord(x) for x in os.urandom(16))
Ich denke, was Sie suchen, ist eine universelle eindeutige Kennung. Dann ist die Modul-UUID in Python genau das, wonach Sie suchen.
UUID4 gibt Ihnen eine zufällige eindeutige Kennung, die dieselbe Länge wie eine MD5-Summe hat. Hex wird als Hex-Zeichenfolge dargestellt, anstatt ein UUID-Objekt zurückzugeben.
http://docs.python.org/2/library/uuid.html
quelle
Dies funktioniert sowohl für Python 2.x als auch für 3.x.
quelle
Das
secrets
Modul wurde in Python 3.6+ hinzugefügt. Es bietet kryptografisch sichere Zufallswerte mit einem einzigen Aufruf. Die Funktionen verwenden ein optionalesnbytes
Argument. Der Standardwert ist 32 (Bytes * 8 Bit = 256-Bit-Token). MD5 verfügt über 128-Bit-Hashes. Stellen Sie daher 16 für "MD5-ähnliche" Token bereit.quelle
Noch ein Ansatz. Sie müssen kein int formatieren, um es zu erhalten.
Bietet Ihnen Flexibilität bei der Länge der Zeichenfolge.
quelle
''.join(random.sample(string.ascii_letters + string.digits, 8))
pythonischer?Ein weiterer Ansatz für diese spezielle Frage:
Ich sage nicht, dass es schneller oder einer anderen Antwort vorzuziehen ist. nur dass es ein anderer Ansatz ist :)
quelle
quelle
quelle
Es sollte auch beachtet werden, dass MD5 eine sehr schwache Hash-Funktion ist. Es wurden auch Kollisionen gefunden (zwei verschiedene Klartextwerte führen zu demselben Hash). Verwenden Sie einfach einen zufälligen Wert für
plaintext
.quelle