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对象。

http://docs.python.org/2/library/uuid.html

这适用于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()