Python'da nasıl benzersiz bir oturum kimliği oluştururum?Python'da benzersiz oturum kimliği
cevap
Öyle gibi uuid library kullanabilirsiniz:
import uuid my_id = uuid.uuid1() # or uuid.uuid4()
Bu rastgele bir sayı oluşturmak kadar basit olabilir. Tabii ki, oturum kimliğinizi bir veritabanında veya bir şeyde saklamanız ve çoğaltılmadığından emin olmak için oluşturduğunuz her birini kontrol etmeniz gerekir, ancak sayıların yeterince büyük olması durumunda hiçbir zaman olmayacaktır.
Tam olarak, Bu yüzden benim çözümüm: http://stackoverflow.com/questions/817882/unique-session-id-in-python/818040#818040 –
import os, base64
def generate_session():
return base64.b64encode(os.urandom(16))
neden downmod? –
Ben duno, ama bu geçerli bir çözüm gibi görünüyor. Bununla birlikte, "==" ifadesini kestirmenizi ve aynı zamanda daha az çarpışma şansı için bir zaman damgası eklemenizi tavsiye ederim. – Unknown
4 milyar iterasyondan sonra bir çarpışma şansı 8 milyarda 1'dir.Eğer bir çarpışma ihtimalini azaltmak istersem, sadece os.urandom (32) bit sayısını arttırabilirim. Ve "==" izleyen sıranın ne anlama geldiğini anlamıyorum. –
Oturum ne için? Bir web uygulaması mı? the beaker module'a bakmak isteyebilirsiniz. Pylons'ta oturumları yürütmek için varsayılan modüldür.
GÜNCELLEME: 2016-12-21
Bir çok son ~ 5 yaş yaşandı. /dev/urandom
güncellendi ve şimdi modern Linux çekirdeğinde ve dağılımlarında yüksek entropi bir rastlantısallık kaynağı olarak kabul ediliyor. Son 6 ayda, Ubuntu kullanarak bir Linux 3.19 çekirdeğinde entropi açlığını gördük, bu yüzden bu sorunun "çözüldüğünü" düşünmüyorum, ancak herhangi bir rastlantısallık istendiğinde düşük entropi rastlantısallığıyla sonuçlanmakta güçlük çekiyor. işletim sisteminden.
Bunu söylemekten nefret ediyorum ama burada yayınlanan diğer çözümlerden hiçbiri bir varlık açısından doğru "güvenli oturum kimliği."
# pip install M2Crypto
import base64, M2Crypto
def generate_session_id(num_bytes = 16):
return base64.b64encode(M2Crypto.m2.rand_bytes(num_bytes))
Ne uuid()
veya os.urandom()
oturum kimlikleri üretmek için iyi seçimlerdir. Her ikisi de rasgele sonuçları oluşturabilir, ancak rastgele zayıf nedeniyle güvenli olduğu anlamına gelmez. Bkz. "How to Crack a Linear Congruential Generator", Haldir veya NIST's resources on Random Number Generation.
Python atm en iyi OpenSSL API pyOpenSSL görünen M2Crypto edilir
# pip install pyOpenSSL
import uuid, OpenSSL
uuid.UUID(bytes = OpenSSL.rand.bytes(16))
# UUID('c9bf635f-b0cc-d278-a2c5-01eaae654461')
olarak:
import uuid, M2Crypto
uuid.UUID(bytes = M2Crypto.m2.rand_bytes(num_bytes)))
# UUID('5e85edc4-7078-d214-e773-f8caae16fe6c')
ya: hala bir UUID kullanmak istiyorsanız, o zaman iyi başlangıç rasgele sayı ile oluşturulan bir UUID kullanmak sadece eski uygulamaları desteklemek için sürdürülmelidir.
UUID sorunları hakkında yapılan atıflar faydalıdır. Bunu gönderdiğiniz için teşekkürler. Soru: Oturum kimliğini oluşturmanın en iyi yolu nedir? Özellikle UUID uygulamalarından alıntı yaptığınız hatalarla, bunu nasıl farklı bir şekilde yaparsınız? Şu an böyle bir şey yazıyor ve en iyi yaklaşımla ortaya çıkmaya çalışıyorum. Ayrıca, hataya dayanıklı olması gerekir - ör., Bir veritabanı sunucusuna bağlantıya bağlı olamaz. – ratsbane
Yukarıdaki örneklerden herhangi biri işe yarayacaktır. Anahtar, "kriptografik olarak yeterli entropi" ile dolu iyi bir rasgele sayı üretecinden yararlanıyor. Estetiğin ve temsilin büyüklüğünün ötesinde, bir "Base64" dizesi veya bir "UUID", hatta bir hex kodlanmış dizgisi olarak yeterince rastgele bir değer kodlaması arasında bir fark yoktur. Her biri kendi başına. Ben şahsen temel nedenlerle base64'ü tercih ediyorum. – Sean
Teşekkürler. Bu ses gibi görünüyor. Bu öğleden sonra – ratsbane
- 1. Benzersiz bilgisayar kimliği
- 2. JavaScript Benzersiz Tarayıcı Kimliği
- 3. bir oturum kimliği
- 4. Bir android etkinliğinin benzersiz kimliği
- 5. E-postaların benzersiz kimliği nedir?
- 6. Paypal'ın Jeton Kimliği Benzersiz mi?
- 7. .NET'te Terminal Hizmetleri Oturum Kimliği Alınıyor?
- 8. Benzersiz kullanıcı kimliği oluşturmak için UDID kullanma
- 9. Java tabanlı benzersiz bir bilgisayar kimliği donanımı
- 10. Yetkili kullanıcının benzersiz belirteci (kimliği) nasıl alınır?
- 11. Aygıt belirteci, aygıt kimliği kadar benzersiz mi?
- 12. İş parçacığı kimliği işlem başına veya bilgisayar başına benzersiz mi?
- 13. Nümerik dizi veya pandalarla pythonda rutini sadeleştirme
- 14. Spring Security ile Oturum Kimliği Alınıyor
- 15. Çerezde oturum kimliği kaydetme kavramı nedir?
- 16. PHP - session.use_trans_sid kullanırken oturum kimliği değişiyor
- 17. Her birzon eko cihazı için benzersiz cihaz kimliği edinin
- 18. Ekipler arasında bir Slack kanal kimliği benzersiz mi?
- 19. One Signal kullanıcısı iOS'taki benzersiz oyuncu kimliği nasıl alınır?
- 20. JS veya Jquery benzersiz bir span kimliği oluştur
- 21. java başvuru için benzersiz bir sunucu kimliği olsun
- 22. Uygulama kimliği ve Android için Cihaz kimliği kombinasyonu ile benzersiz kimlik
- 23. CSRF Doğrulama Jetonu: oturum kimliği güvenli mi? asp.net olarak
- 24. Oturum açma sistemi olarak açık kimliği nasıl kullanılır?
- 25. php.ini dosyasını düzenlemeden özel bir oturum kimliği oluşturmanın yolu
- 26. Şu anda oturum açmış olan kullanıcı kimliği Django'da nasıl edinilir?
- 27. aspnet kimliği aynı anda giriş yapın aynı hesap oturum açın
- 28. Sıralama olmadan benzersiz benzersiz
- 29. Alfasayısal Dize'nden Benzersiz Kimlik Oluşturun
- 30. OAuth aracılığıyla Apple kimliği?
Aradığım şey bu! – Alex
Ama bu çok rasgele değil. – Gumbo
@Gumbo: Lütfen detaylandırın? – saffsd