在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之和相同。十六进制将表示为十六进制字符串,而不是返回一个uuid对象。
这适用于python 2.x和3.x.
import os
import binascii
print(binascii.hexlify(os.urandom(16)))
'4a4d443679ed46f7514ad6dbe3733c3d'
secrets
module是在Python 3.6+中添加的。它通过一次调用提供加密安全的随机值。这些函数采用可选的nbytes
参数,默认值为32(字节* 8位= 256位标记)。 MD5具有128位哈希值,因此为“类似MD5”的令牌提供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'
还有另一种方法。您不必格式化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'
这个具体问题的另一种方法:
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
的随机值。