2014-07-10 50 views
-8
var=hashlib.md5(str(random.random())).hexdigest()[:16] 

我在閱讀python中的代碼時,遇到上面的代碼行。 任何人都可以解釋我上面的代碼行嗎?下面的代碼行是做什麼的?

+0

或許你可以嘗試執行的代碼位看? – buruzaemon

+0

不知道pyython,但我在這裏:得到一個隨機字符串,哈希它whith md5然後得到一個16長度的十六進制字符串http://forums.udacity.com/questions/100116165/what-does-hexdigest-and-what- do-it-do \ – lordkain

回答

2

該行創建一個隨機的16個字符的十六進制字符串。

  • random.random()產生範圍[0.0,1.0)內的隨機浮動值。

    >>> import random 
    >>> random.random() 
    0.845295579640289 
    
  • str()產生隨機值的字符串版本。

    >>> str(0.845295579640289) 
    '0.84529557964' 
    
  • hashlib.md5()創建MD5 message digest散列對象,具有字符串值初始化。

    >>> hashlib.md5('0.84529557964') 
    <md5 HASH object @ 0x10074c530> 
    
  • hexdigest() method然後產生散列摘要,以十六進制表示。 MD5算法產生一個16個字節的信息,如在十六進制,這意味着32個字符產生表達時:

    >>> hashlib.md5('0.84529557964').hexdigest() 
    '5180b52225eac65bee1d6419e28ef397' 
    
  • [:16]切片挑出前16個字符。該步驟半部摘要只是前16個字符總分32:

    >>> '5180b52225eac65bee1d6419e28ef397'[:16] 
    '5180b52225eac65b' 
    

總而言之,產生隨機16個字符的十六進制值的相當冗長的,低效和不安全的方式。我會使用os.urandom()代替,編碼爲十六進制:

>>> import os 
>>> os.urandom(8).encode('hex') 
'a8cb7b56d476b556' 

這將產生一個隨機8字節字符串值,其表示爲十六進制時,也可產生16個十六進制字符,完全是隨機的。

我的crypto-fu並不是那麼好,但我有一種印象,即後一種形式的加密性強於取浮點假隨機值字符串的MD5散列的一半。

+0

@martijin pieters,什麼是md5? – shubham

+7

@shubham您的Google按鈕是否損壞? – Clive

+1

MD5是哈希算法。 @shubham – Idris

-1

md5是加密解密技術,它產生128位校驗和,並以文本格式的32位十六進制數表示。 因此hashlib.md5(str(random.random())).hexdigest()會給你一個字符串中的這個數字,並且 [:16]將提取該散列的前16個數字並將存儲在var 閱讀這些參考資料以獲得更多細節。

Python Md5

Md5 Hash