我需要生成一個將存儲在Redis服務器中的API密鑰和Secret。什麼是產生密鑰和祕密的最佳方式?什麼是在Python中生成API KEY和SECRET的最簡單和最安全的方法
我正在開發基於Django-tastypie框架的應用程序。
我需要生成一個將存儲在Redis服務器中的API密鑰和Secret。什麼是產生密鑰和祕密的最佳方式?什麼是在Python中生成API KEY和SECRET的最簡單和最安全的方法
我正在開發基於Django-tastypie框架的應用程序。
編輯:產生隨機數的一個非常安全的方式,你應該使用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
不知道爲什麼這是downvoted,os.urandom()既簡單又安全。 –
謝謝你會嘗試一下 –
添加答案,因爲我不能評論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)])
如果你對Python的3.6或更高版本,該secrets模塊是要走的路:
祕密模塊用於生成適合管理如密碼數據加密的強隨機數,賬戶認證,安全令牌和相關的祕密。
特別是,祕密應優先用於隨機模塊中的默認僞隨機數生成器,該生成器專爲建模和仿真而設計,而不是用於安全或密碼學。
例如生成一個16字節的令牌:
>>> import secrets
>>> secrets.token_urlsafe(16)
'zs9XYCbTPKvux46UJckflw'
>>> secrets.token_hex(16)
'6bef18936ac12a9096e9fe7a8fe1f777'
有'get_random_string'在'django.utils.crypto',看到http://stackoverflow.com/questions/25943850/django-package-to-generate-random-alphanumeric -string – Kos