random شرح حلقة - كيف يمكنني إنشاء رقم عشوائي آمن مشفر في python؟





2 Answers

نظرًا لأنك تريد إنشاء أعداد صحيحة في نطاق معين ، فمن الأسهل استخدام فئة random.SystemRandom بدلاً من ذلك. يمنحك إنشاء مثيل من هذه الفئة كائنًا يدعم كافة أساليب الوحدة النمطية random ، ولكن باستخدام os.urandom() تحت الأغطية. أمثلة:

>>> from random import SystemRandom
>>> cryptogen = SystemRandom()
>>> [cryptogen.randrange(3) for i in range(20)] # random ints in range(3)
[2, 2, 2, 2, 1, 2, 1, 2, 1, 0, 0, 1, 1, 0, 0, 2, 0, 0, 0, 0]
>>> [cryptogen.random() for i in range(3)]  # random floats in [0., 1.)
[0.2710009745425236, 0.016722063038868695, 0.8207742461236148]

إلخ. باستخدام urandom() مباشرة ، يجب عليك إنشاء خوارزميات خاصة بك لتحويل وحدات البايت العشوائية التي تنتجها إلى النتائج التي تريدها. لا تفعل ذلك ؛-) SystemRandom يفعل ذلك لك.

لاحظ هذا الجزء من المستندات:

class.SystemRandom ([seed])

الفئة التي تستخدم الدالة os.urandom () لإنشاء أرقام عشوائية من المصادر التي يوفرها نظام التشغيل. غير متوفر على جميع الأنظمة. لا تعتمد على حالة البرامج والتسلسلات لا يمكن استنساخها. تبعاً لذلك ، فإن أساليب seed () و jumpahead () ليس لها أي تأثير ويتم تجاهلها. أساليب getstate () و setstate () رفع NotImplementedError إذا اتصلت.

التكرار for اكواد

أنا بصدد إنشاء مشروع في python وأود إنشاء رقم عشوائي آمن مشفرًا ، كيف يمكنني فعل ذلك؟ لقد قرأت على الإنترنت أن الأرقام التي يولدها الموزع العشوائي العادي ليست آمنة بشكل مشفر ، وأن الدالة os.urandom(n) إلى سلسلة وليس إلى رقم.




إذا كنت تريد رقمًا عشوائيًا n ، تحت Python 2.4+ ، فإن أسهل طريقة وجدتها هي

import random
random.SystemRandom().getrandbits(n)

لاحظ أن os.urandom() يستخدم os.urandom() ، وبالتالي فإن نتيجة هذه الطريقة جيدة فقط مثل تطبيق urandom() الخاص urandom() .




Related