2016-01-20 83 views

回答

8

編輯:產生隨機數的一個非常安全的方式,你應該使用urandom的:

from binascii import hexlify 

key = hexlify(os.urandom(lenght)) 

這將產生字節,叫key.decode()如果你需要一個字符串

你可以只生成的密鑰你所需要的長度蟒蛇方式:

import random 
import string 

def generate_key(length): 
    return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(length)) 

然後你可以與你所需要的長度key = generate_key(40)調用它。
您可以指定要使用的字母,例如只使用string.ascii_lowercase對於僅小寫字母等關鍵

也有在tastypie API認證模式,也許值得檢查出https://django-tastypie.readthedocs.org/en/latest/authentication.html#apikeyauthentication

+0

不知道爲什麼這是downvoted,os.urandom()既簡單又安全。 –

+0

謝謝你會嘗試一下 –

0

添加答案,因爲我不能評論T. Opletals的答案。

您不應該使用random.choice,因爲隨機密碼不安全。一個更好的選擇將是random.SystemRandom(),它使用系統的隨機源,在Linux上這將是隨意的。

def generate_key(length): 
    char_set = string.ascii_letters + string.punctuation      
    urand = random.SystemRandom()           
    return ''.join([urand.choice(char_set) for _ in range(length)]) 
0

如果你對Python的3.6或更高版本,該secrets模塊是要走的路:

祕密模塊用於生成適合管理如密碼數據加密的強隨機數,賬戶認證,安全令牌和相關的祕密。

特別是,祕密應優先用於隨機模塊中的默認僞隨機數生成器,該生成器專爲建模和仿真而設計,而不是用於安全或密碼學。

例如生成一個16字節的令牌:

>>> import secrets 
>>> secrets.token_urlsafe(16) 
'zs9XYCbTPKvux46UJckflw' 
>>> secrets.token_hex(16) 
'6bef18936ac12a9096e9fe7a8fe1f777' 
相關問題