تولید رمز تصادفی با استفاده از زبان برنامه نویسی پایتون
در این آموزش قصد داریم با استفاده از زبان برنامه نویسی پایتون، برنامه ای بنویسیم که از کاربر بخواهد تا تعداد رقم مورد نیاز برای رمز خود را وارد کند و بعد از وارد کردن عدد خود به صورت تصادفی یک رمز با امنیت بسیار بالا به کاربر به عنوان خروجی بدهد. قبل از مطالعه ادامه آموزش کمی درباره راه حل نوشتن الگوریتم برنامه فکر کنید.
قبل از شروع به نوشتن برنامه ابتدا باید درباره امنیت رمزها کمی اطلاعات داشته باشیم. بسیاری از رمزعبورها با استفاده از حدس زدن (انسان یا نرم افزار) پیدا میشوند. ولی هر چقدر که رمز عبور پیچیدهتر باشد، پیدا کردن آن هم برای انسان و هم برای نرم افزار مشکلتر و زمانبرتر خواهد بود. پس همیشه سعی کنید رمز عبوری انتخاب کنید که پیچیده باشد. یعنی هم شامل حروف بزرگ و کوچک باشد، هم اعداد، هم حروف اضافه و هم شامل علائم باشد. همچنین طول (تعداد حرف) رمز عبور شما نیز بیشتر از ۸ حرف باشد. هرچه رمز عبور شما پیچیدهتر و طول آن بیشتر باشد، امکان پیدا شدن آن نیز ضعیفتر و بسیار زمانبرتر خواهد بود.
در این برنامه برای تولید کدهای تصادفی نیاز به دو ماژول پایتون داریم:
ماژول String که شامل الفبا، اعداد و کاراکترهای اسکی است
ماژول Random برای انتخاب تصادفی کاراکتر ها
string.ascii_lowercase تمام الفبای انگلیسی را به صورت حروف کوچک به ما می دهد.
abcdefghijklmnopqrstuvwxyz
تابع random.choice یک کاراکتر را به صورت تصادفی انتخاب می کند و با استفاده از join میتوانیم به انتهای متغیرمان اضافه کنیم.
import random
import string
def get_random_string(length):
letters = string.ascii_lowercase
result_str = ”.join(random.choice(letters) for i in range(length))
print(“Random string of length”, length, “is:”, result_str)
get_random_string(8)
output:
Random string of length 8 is: mweeusat
در random.choice احتمال تکراری بودن کاراکترهای انتخابی وجود دارد اما اگر بخواهیم کاراکتر تکراری انتخاب نشود باید از تابع random.sample استفاده کنیم.
import random
import string
# get random string without repeating letters
def get_random_string(length):
letters = string.ascii_lowercase
result_str = ”.join(random.sample(letters, length))
print(“Random String is:”, result_str) get_random_string(8)
Output:
Random String is: fpxudstg
با استفاده از (الفبا) string.ascii_letters ، (اعداد)string.digits و (کاراکترهای ویژه)string.punctuation می توانیم برنامه را کمی بهتر بنویسیم
در این برنامه ما از کاربر می خواهیم تا طول رمز خود را به ما اعلام کند و طول رمز ۸ تا ۱۲ را به او پیشنهاد می دهیم. اما در برنامه ما حداقل طول رمز را ۴ انتخاب کرده ایم و خروجی ما حتما ۴ یا بیشتر است.
تابع get_random_password وظیفه اصلی برنامه را انجام می دهد ابتدا تمام اعداد، الفبا و کاراکترهای ویژه را در متغیر random_source قرار می دهیم و رمزمان را به صورت تصادفی از این متغیر انتخاب می کنیم
در خط بعد تعیین کردیم که یک حرف کوچک، یک حرف بزرگ، یک عدد و یک کاراکتر ویژه در رمز ما به عنوان ۴ کاراکتر ثابت وجود داشته باشد و اگر کاربر طول بیشتری را تقاضا کرده باشد از همه کاراکترها به صورت تصادفی انتخاب میشود.
توسط shuffle تمام کاراکترها دوباره مکانشان به صورت تصادفی تغییر میکند تا ترتیب مشخصی برای رمزمان وجود نداشته باشد و در پایان به صورت خروجی تابع get_random_password برای نمایش به کاربر نمایش داده میشود.
import random import string print("please inter password lenght (8-12 digits)") a=input() a=int(a) def get_random_password(): random_source = string.ascii_letters + string.digits + string.punctuation password = random.choice(string.ascii_lowercase) password += random.choice(string.ascii_uppercase) password += random.choice(string.digits) password += random.choice(string.punctuation) for i in range(a-4): password += random.choice(random_source) password_list = list(password) random.SystemRandom().shuffle(password_list) password = ''.join(password_list) return password print("First Random Password is ", get_random_password()) print("Second Random Password is ", get_random_password()) Output: please inter password lenght (8-12 digits) ۱۲ First Random Password is fhyXRn9?~n,| Second Random Password is C\DI^5v*{hKU
در پایان برای تست کردن امنیت رمز تولید شده می توانید از سایت زیر استفاده کنید.
در ادامه می توانید مطالعه کنید
- آموزش رابط گرافیکی Tkinter (بخش اول)
- بازی سنگ، کاغذ، قیچی با پایتون
- ساعت زنگ دار با GUI در پایتون
- نحوه بررسی اتصال اینترنت کاربر در پایتون
- تفاوت بین روتر و فایروال - مهر ۱۰, ۱۴۰۳
- مسیریابی استاتیک در ویندوز - مهر ۸, ۱۴۰۳
- پروتکل SNMP - شهریور ۱۵, ۱۴۰۳