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 합계와 길이가 동일한 임의의 고유 식별자를 제공합니다.16진수는 uuid 개체를 반환하는 대신 is를 16진수 문자열로 나타냅니다.
http://docs.python.org/2/library/uuid.html
https://docs.python.org/3/library/uuid.html
이 모듈은 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'
이것은 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))
문자열의 길이를 유연하게 조정할 수 있습니다.
>>> 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()
가장 적절한 방법은 사용하는 것입니다.random
모듈
import random
format(random.getrandbits(128), 'x')
사용.secrets
과잉 살상입니다.성능을 희생시키는 암호화된 강력한 무작위성을 생성합니다.
UUID(UUID4도)가 완전히 랜덤하지 않기 때문에 UUID 사용을 제안하는 모든 응답은 본질적으로 잘못되었습니다.적어도 변경되지 않는 고정 버전 번호는 포함됩니다.
import uuid
>>> uuid.uuid4()
UUID('8a107d39-bb30-4843-8607-ce9e480c8339')
>>> uuid.uuid4()
UUID('4ed324e8-08f9-4ea5-bc0c-8a9ad53e2df6')
다음 이외의 것을 포함하는 모든 MD54
왼쪽에서 13번째 위치에서는 이런 식으로 도달할 수 없습니다.
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
.
언급URL : https://stackoverflow.com/questions/976577/random-hash-in-python
'code' 카테고리의 다른 글
Google Chrome용 Firebug와 유사한 디버거 (0) | 2023.08.06 |
---|---|
PHP에서 register_globals는 무엇입니까? (0) | 2023.08.06 |
그룹화 기준 및 주문 기준 (0) | 2023.08.06 |
lodash 다중 열 정렬 기준 (0) | 2023.08.06 |
Android는 .apk 파일을 보관합니까?만약 그렇다면 어디에? (0) | 2023.08.06 |