JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr ]+@sdZdZeeZeeZedZiZd d Zd dZdddZ dddZ y.ddl Z e Z eZ eje jZWnek re Z eZ YnXyddl mZWn_ek r.eddedDZeddedDZddd ZYnXxVeD]NZye eee>> 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' md5sha1sha224sha256sha384sha512newalgorithms_guaranteedalgorithms_available pbkdf2_hmacc CsXt}|j|}|dk r%|Sy|dkrXddl}|j|d<|dsr,ccs|]}|dAVqdS)6Nr)r*r+rrrr,scCst|tst|t|ttfsBtt|}t|ttfsitt|}t|}t|}t|dd}t||krt||j }|d|t|}|j |j t |j |j t ||dd}|dkr(t||dkr=|j}|dkrUt|d} d} tj} xt| |kr ||| jdd } tj| d } x7t|dD]%}|| } | | | d N} qW| d7} | | j|jd 7} qmW| d|S) N block_size@scSsB|j}|j}|j||j|j|jS)N)copyupdatedigest)msginnerouterZicpyZocpyrrrprfs    zpbkdf2_hmac..prfr%big) isinstancestr TypeErrorbytes bytearray memoryviewrr lenr3r2 translate _trans_36 _trans_5Cr digest_sizeint from_bytesto_bytesrange)Z hash_nameZpasswordZsaltZ iterationsZdklenr5r6 blocksizer7ZdkeyZlooprGprevZrkeyirrrr sB            zcode for hash %s was not found.)rrrrrr)rrr r )__doc__Z__always_supportedsetrr __all__rrr$r'r(r!rZ __get_hashunionopenssl_md_meth_namesrr r>rIrDrCZ __func_nameglobalsrlogging exceptionrrrr5sB        :