Python中的随机哈希

mis*_*ero 89 python hash md5

在Python中生成随机哈希(MD5)的最简单方法是什么?

sth*_*sth 122

md5-hash只是一个128位的值,所以如果你想要一个随机的:

import random

hash = random.getrandbits(128)

print("hash value: %032x" % hash)
Run Code Online (Sandbox Code Playgroud)

不过,我真的没有看到这一点.也许你应该详细说明为什么你需要这个......

  • +1 - 肯定这比我的答案好,也可以这样使用:hex(random.getrandbits(128))[2:-1]这给你的输出与md5 hexdigest方法相同. (10认同)
  • 以下是如何使用`os.urandom`:`''.join('%02x'%ord(x)for os in os.urandom(16)) (9认同)
  • +1 表示不从随机数计算相对昂贵的哈希值:此方法速度快 5 倍。 (2认同)
  • 我会使用os.urandom,因为想要一个MD5哈希可能意味着想要一个安全的哈希. (2认同)
  • 很好地使用十六进制格式规范进行打印.+1 (2认同)

seb*_*ebs 83

我认为你要找的是一个通用的唯一标识符.然后python中的模块UUID就是你要找的.

import uuid
uuid.uuid4().hex
Run Code Online (Sandbox Code Playgroud)

UUID4为您提供一个随机唯一标识符,其长度与md5之和相同.十六进制将表示为十六进制字符串,而不是返回一个uuid对象.

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


But*_*840 44

这适用于python 2.x和3.x.

import os
import binascii
print(binascii.hexlify(os.urandom(16)))
'4a4d443679ed46f7514ad6dbe3733c3d'
Run Code Online (Sandbox Code Playgroud)

  • 适用于2.x和3.x:binascii.hexlify(os.urandom(16)) (7认同)
  • 这种十六进制编码方式不再适用于Python 3. (2认同)

Nic*_*k T 32

secrets模块是在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'
Run Code Online (Sandbox Code Playgroud)


Mat*_*lor 16

还有另一种方法.您不必格式化int来获取它.

import random
import string

def random_string(length):
    pool = string.letters + string.digits
    return ''.join(random.choice(pool) for i in xrange(length))
Run Code Online (Sandbox Code Playgroud)

为您提供字符串长度的灵活性.

>>> random_string(64)
'XTgDkdxHK7seEbNDDUim9gUBFiheRLRgg7HyP18j6BZU5Sa7AXiCHP1NEIxuL2s0'
Run Code Online (Sandbox Code Playgroud)

  • 我可能会将 string.letters 更改为 'abcdf' 以反映十六进制数字。但很好的解决方案! (3认同)

tzo*_*zot 6

这个具体问题的另一种方法:

import random, string

def random_md5like_hash():
    available_chars= string.hexdigits[:16]
    return ''.join(
        random.choice(available_chars)
        for dummy in xrange(32))
Run Code Online (Sandbox Code Playgroud)

我并不是说它比任何其他答案更快或更可取; 只是这是另一种方法:)


Sam*_*Sam 5

import uuid
from md5 import md5

print md5(str(uuid.uuid4())).hexdigest()
Run Code Online (Sandbox Code Playgroud)


giz*_*ole 5

import os, hashlib
hashlib.md5(os.urandom(32)).hexdigest()
Run Code Online (Sandbox Code Playgroud)