grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026 þ“qc+ã@sždZdZeeƒZeeƒZedZiZd d „Zd d„Zddd„Z ddd„Z y.ddl Z e Z eZ eje jƒZWnek r¸e Z eZ YnXyddl mZWn_ek r.edd„edƒDƒƒZedd„edƒDƒƒZddd „ZYnXxVeD]NZye eƒeƒe>> import hashlib >>> m = hashlib.md5() >>> m.update(b"Nobody inspects") >>> m.update(b" the spammish repetition") >>> m.digest() b'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9' More condensed: >>> hashlib.sha224(b"Nobody inspects the spammish repetition").hexdigest() 'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2' Úmd5Úsha1Úsha224Úsha256Úsha384Úsha512ÚnewÚalgorithms_guaranteedÚalgorithms_availableÚ pbkdf2_hmacc CsXt}|j|ƒ}|dk r%|Syë|dkrXddl}|j|d<|d‘sr,éccs|]}|dAVqdS)é6Nr)r*r+rrrr,’scCst|tƒst|ƒ‚t|ttfƒsBtt|ƒƒ}t|ttfƒsitt|ƒƒ}t|ƒ}t|ƒ}t|ddƒ}t|ƒ|krºt||ƒj ƒ}|d|t|ƒ}|j |j t ƒƒ|j |j t ƒƒ||dd„}|dkr(t|ƒ‚|dkr=|j}|dkrUt|ƒ‚d} d} tj} x¡t| ƒ|kr ||| jd d ƒƒ} tj| d ƒ} x7t|dƒD]%}|| ƒ} | | | d ƒN} q¾W| d7} | | j|jd ƒ7} qmW| d|…S) zóPassword based key derivation function 2 (PKCS #5 v2.0) This Python implementations based on the hmac module about as fast as OpenSSL's PKCS5_PBKDF2_HMAC for short passwords and much faster for long passwords. Z block_sizeé@scSsB|jƒ}|jƒ}|j|ƒ|j|jƒƒ|jƒS)N)ÚcopyÚupdateÚdigest)ÚmsgÚinnerÚouterZicpyZocpyrrrÚprf­s    zpbkdf2_hmac..prféNr%éZbig)Ú isinstanceÚstrÚ TypeErrorÚbytesÚ bytearrayÚ memoryviewrr Úlenr2r1Ú translateÚ _trans_36Ú _trans_5CrZ digest_sizeÚintÚ from_bytesÚto_bytesÚrange)Z hash_nameZpasswordZsaltZ iterationsZdklenr4r5Z blocksizer6ZdkeyZlooprDÚprevZrkeyÚirrrr ”sB            zcode for hash %s was not found.)rrrrrr)rrr r )Ú__doc__Z__always_supportedÚsetrr Ú__all__rrr$r'r(r!rZ __get_hashÚunionZopenssl_md_meth_namesrr r<rFrBrAZ __func_nameÚglobalsrZloggingZ exceptionrrrrÚ5sB        :