Python中的随机哈希
在Python中生成随机哈希(MD5) 最简单的方法是什么?
一个md5-hash只是一个128位的值,所以如果你想要一个随机的:
import random hash = random.getrandbits(128) print "hash value: %032x" % hash
不过,我真的不明白这一点。 也许你应该详细说明为什么你需要这个…
我认为你正在寻找的是一个通用的唯一标识符。然后Python中的模块UUID就是你正在寻找的。
import uuid uuid.uuid4().hex
UUID4为您提供一个随机的唯一标识符,其长度与md5总和相同。 hex将表示为一个hexstring,而不是返回一个uuid对象。
这适用于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))
给你弹性的string的长度。
>>> random_string(64) 'XTgDkdxHK7seEbNDDUim9gUBFiheRLRgg7HyP18j6BZU5Sa7AXiCHP1NEIxuL2s0'
解决这个问题的另一种方法是:
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()
secrets
模块是在Python 3.6 +中添加的。 它通过一次调用提供密码安全的随机值。 函数采用可选的nbytes
参数,默认值为32(字节* 8位= 256位令牌)。 MD5有128位散列,因此为“MD5-like”标记提供16个。
>>> 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'
import os, hashlib hashlib.md5(os.urandom(32)).hexdigest()