Pythonでランダムハッシュ(MD5)を生成するeasiestの方法は何ですか?
Md5-hashは128ビットの値であるため、ランダムな値が必要な場合:
import random
hash = random.getrandbits(128)
print("hash value: %032x" % hash)
しかし、私は本当にその点を見ていません。たぶん、これが必要な理由を詳しく説明する必要があります...
これはpython 2.xおよび3.xの両方で機能します
import os
import binascii
print(binascii.hexlify(os.urandom(16)))
'4a4d443679ed46f7514ad6dbe3733c3d'
secrets
モジュール は、Python 3.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'
さらに別のアプローチ。それを取得するために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は非常に弱いハッシュ関数であり、衝突も見つかっていることに注意してください(2つの異なるプレーンテキスト値が同じハッシュになります)plaintext
にランダムな値を使用します。