مكتبة كيف يمكنني إنشاء رقم عشوائي آمن مشفر في python؟




مكتبة اكواد بايثون (4)

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

https://code.i-harness.com


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

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

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


لإنشاء رقم صحيح شبه عشوائي آمن مشفر ، يمكنك استخدام الشفرة التالية:

int(binascii.hexlify(os.urandom(n)),16)

حيث n عدد صحيح و n أكبر ، كلما كان العدد الصحيح الذي تم إنشاؤه أكبر.

سيكون عليك استيراد os و binascii أولاً.

يمكن أن تختلف نتيجة هذا الرمز حسب النظام الأساسي.


يمكنك الحصول على قائمة بأرقام عشوائية فقط من خلال تطبيق الدالة ord عبر وحدات البايت التي يتم إرجاعها بواسطة os.urandom ، مثل هذا

>>> import os
>>> os.urandom(10)
'm\xd4\x94\x00x7\xbe\x04\xa2R'
>>> type(os.urandom(10))
<type 'str'>
>>> map(ord, os.urandom(10))
[65, 120, 218, 135, 66, 134, 141, 140, 178, 25]

نقلا عن وثائق os.urandom ،

إرجاع سلسلة من البايتات العشوائية n مناسبة للاستخدام التشفير .

تقوم هذه الدالة بارجاع بايتات عشوائية من مصدر عشوائية خاص بنظام التشغيل. يجب أن تكون البيانات التي تم إرجاعها غير متوقعة بما فيه الكفاية لتطبيقات التشفير ، على الرغم من أن الجودة الدقيقة تعتمد على تطبيق نظام التشغيل. على نظام UNIX يشبه هذا سوف الاستعلام /dev/urandom ، وعلى نظام التشغيل Windows فإنه سيتم استخدام CryptGenRandom() .


يقدم Python 3.6 وحدة أسرار جديدة ، والتي "توفر الوصول إلى مصدر الأمان الأكثر أمانًا الذي يوفره نظام التشغيل الخاص بك." لتوليد بعض الأرقام الآمنة المشفرة ، يمكنك الاتصال بـ secrets.randbelow() .

secrets.randbelow(n)

والتي ستعيد رقمًا بين 0 و n .





cryptography