เป็นอะไรที่ง่ายที่สุดวิธีการสร้างกัญชาสุ่ม (MD5) ในงูใหญ่?
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806
เป็นอะไรที่ง่ายที่สุดวิธีการสร้างกัญชาสุ่ม (MD5) ในงูใหญ่?
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806
คำตอบ:
md5-hash เป็นเพียงค่า 128 บิตดังนั้นหากคุณต้องการสุ่ม:
import random
hash = random.getrandbits(128)
print("hash value: %032x" % hash)
ฉันไม่เห็นประเด็นจริงๆ บางทีคุณควรอธิบายให้ละเอียดว่าทำไมคุณถึงต้องการสิ่งนี้ ...
os.urandom
ดังนี้''.join('%02x' % ord(x) for x in os.urandom(16))
ฉันคิดว่าสิ่งที่คุณกำลังมองหาคือตัวระบุที่ไม่ซ้ำกันจากนั้นโมดูล UUID ใน python คือสิ่งที่คุณกำลังมองหา
import uuid
uuid.uuid4().hex
UUID4 ให้ตัวระบุเฉพาะแบบสุ่มที่มีความยาวเท่ากับผลรวม md5 Hex จะแสดงเป็นสตริงฐานสิบหกแทนที่จะส่งคืนวัตถุ uuid
มีการเพิ่มsecrets
โมดูลใน Python 3.6+ ให้ค่าสุ่มที่ปลอดภัยด้วยการเข้ารหัสด้วยการโทรเพียงครั้งเดียว ฟังก์ชันใช้nbytes
อาร์กิวเมนต์ทางเลือกค่าเริ่มต้นคือ 32 (ไบต์ * 8 บิต = โทเค็น 256 บิต) MD5 มีแฮช 128 บิตดังนั้นให้ 16 สำหรับโทเค็น "MD5-like"
>>> 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'
ใช้ได้กับทั้ง python 2.x และ 3.x
import os
import binascii
print(binascii.hexlify(os.urandom(16)))
'4a4d443679ed46f7514ad6dbe3733c3d'
อีกวิธีหนึ่ง คุณไม่ต้องจัดรูปแบบ int เพื่อรับ
import random
import string
def random_string(length):
pool = string.letters + string.digits
return ''.join(random.choice(pool) for i in xrange(length))
ให้ความยืดหยุ่นกับความยาวของสตริง
>>> random_string(64)
'XTgDkdxHK7seEbNDDUim9gUBFiheRLRgg7HyP18j6BZU5Sa7AXiCHP1NEIxuL2s0'
''.join(random.sample(string.ascii_letters + string.digits, 8))
pythonic มากขึ้น?
อีกแนวทางหนึ่งสำหรับคำถามเฉพาะนี้:
import random, string
def random_md5like_hash():
available_chars= string.hexdigits[:16]
return ''.join(
random.choice(available_chars)
for dummy in xrange(32))
ฉันไม่ได้บอกว่ามันเร็วกว่าหรือดีกว่าคำตอบอื่น แค่นั้นก็เป็นอีกแนวทางหนึ่ง :)
import uuid
from md5 import md5
print md5(str(uuid.uuid4())).hexdigest()
import os, hashlib
hashlib.md5(os.urandom(32)).hexdigest()
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)
นอกจากนี้ควรสังเกตด้วยว่า MD5 เป็นฟังก์ชันแฮชที่อ่อนแอมากนอกจากนี้ยังพบการชนกัน (ค่าข้อความธรรมดาสองค่าที่แตกต่างกันส่งผลให้แฮชเดียวกัน) เพียงใช้ค่าสุ่มสำหรับplaintext
.