Losowo, jak na coś? Albo dla przedmiotu? Jeśli chcesz tylko losowego MD5, po prostu wybierz kilka liczb.
samoz
Zmieniam nazwy plików przed załadowaniem i chcę mieć taką nazwę: timestamp_randommd5.extension Pozdrawiam!
mistero
5
Możesz po prostu zmienić ich nazwę na timestamp_randomnumber.ext. Naprawdę nie ma powodu, dla którego md5 (liczba losowa) byłaby lepsza niż sama liczba losowa.
+1 za brak obliczania stosunkowo drogiego hasha z liczby losowej: to podejście jest 5x szybsze.
Nicolas Dumazet
11
+1 - na pewno jest to lepsze niż moja odpowiedź, może być również użyte w ten sposób: hex (random.getrandbits (128)) [2: -1] daje to takie samo wyjście, jak metoda md5 hexdigest.
Jiri
1
wywołanie random.seed () jest mniej więcej bezużyteczne.
tzot
2
Użyłbym os.urandom, ponieważ chęć posiadania skrótu MD5 może oznaczać potrzebę bezpiecznego.
Nieznany
9
Oto jak to zrobić z os.urandom:''.join('%02x' % ord(x) for x in os.urandom(16))
FogleBird
98
Myślę, że szukasz uniwersalnego, unikalnego identyfikatora, a więc moduł UUID w pythonie jest tym, czego szukasz.
import uuid
uuid.uuid4().hex
UUID4 daje losowy unikalny identyfikator, który ma taką samą długość jak suma md5. Hex będzie reprezentować jako ciąg szesnastkowy zamiast zwracać obiekt uuid.
Ten sposób kodowania szesnastkowego nie działa już w Pythonie 3.
Caramdir,
1
dzięki. jest to najlepszy sposób na utworzenie losowego klucza mieszającego.
Jake,
7
działa dla 2.x i 3.x: binascii.hexlify (os.urandom (16))
Clay
44
secretsModuł dodano Pythonie 3.6+. Zapewnia kryptograficznie bezpieczne wartości losowe w jednym wywołaniu. Funkcje przyjmują opcjonalny nbytesargument, domyślnie 32 (bajty * 8 bitów = tokeny 256-bitowe). MD5 ma 128-bitowe skróty, więc podaj 16 dla tokenów „podobnych do MD5”.
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)
Należy również zauważyć, że MD5 jest bardzo słabą funkcją haszującą, znaleziono również kolizje (dwie różne wartości tekstu jawnego dają ten sam hash) Po prostu użyj losowej wartości dla plaintext.
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806Odpowiedzi:
Skrót md5 to tylko 128-bitowa wartość, więc jeśli chcesz mieć losowy:
Jednak naprawdę nie widzę sensu. Może powinieneś wyjaśnić, dlaczego tego potrzebujesz ...
źródło
os.urandom
:''.join('%02x' % ord(x) for x in os.urandom(16))
Myślę, że szukasz uniwersalnego, unikalnego identyfikatora, a więc moduł UUID w pythonie jest tym, czego szukasz.
UUID4 daje losowy unikalny identyfikator, który ma taką samą długość jak suma md5. Hex będzie reprezentować jako ciąg szesnastkowy zamiast zwracać obiekt uuid.
http://docs.python.org/2/library/uuid.html
źródło
Działa to zarówno dla Pythona 2.x, jak i 3.x.
źródło
secrets
Moduł dodano Pythonie 3.6+. Zapewnia kryptograficznie bezpieczne wartości losowe w jednym wywołaniu. Funkcje przyjmują opcjonalnynbytes
argument, domyślnie 32 (bajty * 8 bitów = tokeny 256-bitowe). MD5 ma 128-bitowe skróty, więc podaj 16 dla tokenów „podobnych do MD5”.źródło
Jeszcze inne podejście. Nie będziesz musiał formatować int, aby go uzyskać.
Daje elastyczność co do długości sznurka.
źródło
''.join(random.sample(string.ascii_letters + string.digits, 8))
bardziej pytoniczny?Inne podejście do tego konkretnego pytania:
Nie mówię, że jest to szybsze lub lepsze od jakiejkolwiek innej odpowiedzi; tylko że to inne podejście :)
źródło
źródło
źródło
Należy również zauważyć, że MD5 jest bardzo słabą funkcją haszującą, znaleziono również kolizje (dwie różne wartości tekstu jawnego dają ten sam hash) Po prostu użyj losowej wartości dla
plaintext
.źródło