Là gì đơn giản nhất cách để tạo ra một hash ngẫu nhiên (MD5) bằng Python?
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806
Là gì đơn giản nhất cách để tạo ra một hash ngẫu nhiên (MD5) bằng Python?
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806
Câu trả lời:
Md5-hash chỉ là một giá trị 128-bit, vì vậy nếu bạn muốn một giá trị ngẫu nhiên:
import random
hash = random.getrandbits(128)
print("hash value: %032x" % hash)
Tuy nhiên, tôi không thực sự thấy vấn đề. Có lẽ bạn nên giải thích lý do tại sao bạn cần điều này ...
os.urandom
:''.join('%02x' % ord(x) for x in os.urandom(16))
Tôi nghĩ rằng những gì bạn đang tìm kiếm là một mã định danh duy nhất phổ quát. Vì vậy, UUID của mô-đun trong python chính là thứ bạn đang tìm kiếm.
import uuid
uuid.uuid4().hex
UUID4 cung cấp cho bạn một số nhận dạng duy nhất ngẫu nhiên có cùng độ dài với tổng md5. Hex sẽ đại diện là một chuỗi hex thay vì trả về một đối tượng uuid.
Điều này hoạt động cho cả python 2.x và 3.x
import os
import binascii
print(binascii.hexlify(os.urandom(16)))
'4a4d443679ed46f7514ad6dbe3733c3d'
Các secrets
mô-đun đã được bổ sung bằng Python 3.6+. Nó cung cấp các giá trị ngẫu nhiên an toàn bằng mật mã chỉ với một lệnh gọi. Các hàm lấy một nbytes
đối số tùy chọn , mặc định là 32 (byte * 8 bit = mã thông báo 256 bit). MD5 có mã băm 128 bit, vì vậy hãy cung cấp 16 cho mã thông báo "giống MD5".
>>> import secrets
>>> secrets.token_hex(nbytes=16)
'17adbcf543e851aa9216acc9d7206b96'
>>> secrets.token_urlsafe(16)
'X7NYIolv893DXLunTzeTIQ'
>>> secrets.token_bytes(128 // 8)
b'\x0b\xdcA\xc0.\x0e\x87\x9b`\x93\\Ev\x1a|u'
Tuy nhiên, một cách tiếp cận khác. Bạn sẽ không phải định dạng int để lấy nó.
import random
import string
def random_string(length):
pool = string.letters + string.digits
return ''.join(random.choice(pool) for i in xrange(length))
Giúp bạn linh hoạt về độ dài của chuỗi.
>>> random_string(64)
'XTgDkdxHK7seEbNDDUim9gUBFiheRLRgg7HyP18j6BZU5Sa7AXiCHP1NEIxuL2s0'
''.join(random.sample(string.ascii_letters + string.digits, 8))
nhiều trăn?
Một cách tiếp cận khác cho câu hỏi cụ thể này:
import random, string
def random_md5like_hash():
available_chars= string.hexdigits[:16]
return ''.join(
random.choice(available_chars)
for dummy in xrange(32))
Tôi không nói nó nhanh hơn hay thích hợp hơn bất kỳ câu trả lời nào khác; chỉ là đó là một cách tiếp cận khác :)
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)
Cũng cần lưu ý rằng MD5 là một hàm băm rất yếu, cũng đã tìm thấy xung đột (hai giá trị bản rõ khác nhau dẫn đến cùng một hàm băm) Chỉ cần sử dụng một giá trị ngẫu nhiên cho plaintext
.