121

Pythonでランダムハッシュ(MD5)を生成する最も簡単な方法は何ですか?

4

9 に答える 9

159

md5-hashは単なる128ビット値であるため、ランダムな値が必要な場合は次のようになります。

import random

hash = random.getrandbits(128)

print("hash value: %032x" % hash)

でも、その要点はよくわかりません。多分あなたはこれが必要な理由を詳しく説明する必要があります...

于 2009-06-10T16:09:12.907 に答える
129

あなたが探しているのはユニバーサル一意識別子だと思います。それなら、PythonのモジュールUUIDがあなたが探しているものです。

import uuid
uuid.uuid4().hex

UUID4は、md5の合計と同じ長さのランダムな一意の識別子を提供します。16進数は、uuidオブジェクトを返すのではなく、16進数の文字列として表します。

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

于 2013-11-19T00:18:52.963 に答える
69

secretsモジュールはPython3.6以降で追加されました。1回の呼び出しで暗号的に安全なランダム値を提供します。関数はオプションの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'
于 2017-07-17T22:36:43.630 に答える
48

これは、Python2.xと3.xの両方で機能します

import os
import binascii
print(binascii.hexlify(os.urandom(16)))
'4a4d443679ed46f7514ad6dbe3733c3d'
于 2012-03-22T04:19:41.753 に答える
23

さらに別のアプローチ。取得するために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'
于 2012-01-25T22:10:22.510 に答える
6

この特定の質問に対する別のアプローチ:

import random, string

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

私はそれが他のどの答えよりも速いまたは好ましいと言っているのではありません。それは別のアプローチだというだけです:)

于 2009-06-11T22:52:23.097 に答える
6
import uuid
from md5 import md5

print md5(str(uuid.uuid4())).hexdigest()
于 2013-07-26T18:03:28.763 に答える
4
import os, hashlib
hashlib.md5(os.urandom(32)).hexdigest()
于 2017-05-30T23:44:15.567 に答える
0

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は非常に弱いハッシュ関数であり、衝突も検出されていることにも注意してください(2つの異なるプレーンテキスト値が同じハッシュになります)。にランダムな値を使用するだけですplaintext

于 2019-02-24T19:23:14.803 に答える