var=hashlib.md5(str(random.random())).hexdigest()[:16]
我在閱讀python中的代碼時,遇到上面的代碼行。 任何人都可以解釋我上面的代碼行嗎?下面的代碼行是做什麼的?
var=hashlib.md5(str(random.random())).hexdigest()[:16]
我在閱讀python中的代碼時,遇到上面的代碼行。 任何人都可以解釋我上面的代碼行嗎?下面的代碼行是做什麼的?
該行創建一個隨機的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散列的一半。
md5
是加密解密技術,它產生128位校驗和,並以文本格式的32位十六進制數表示。 因此hashlib.md5(str(random.random())).hexdigest()
會給你一個字符串中的這個數字,並且 [:16]
將提取該散列的前16個數字並將存儲在var
閱讀這些參考資料以獲得更多細節。
或許你可以嘗試執行的代碼位看? – buruzaemon
不知道pyython,但我在這裏:得到一個隨機字符串,哈希它whith md5然後得到一個16長度的十六進制字符串http://forums.udacity.com/questions/100116165/what-does-hexdigest-and-what- do-it-do \ – lordkain