تولید رمز تصادفی با پایتون

تولید رمز تصادفی با استفاده از زبان برنامه نویسی پایتون

در این آموزش قصد داریم با استفاده از زبان برنامه نویسی پایتون، برنامه ای بنویسیم که از کاربر بخواهد تا تعداد رقم مورد نیاز برای رمز خود را وارد کند و بعد از وارد کردن عدد خود به صورت تصادفی یک رمز با امنیت بسیار بالا به کاربر به عنوان خروجی بدهد. قبل از مطالعه ادامه آموزش کمی درباره راه حل نوشتن الگوریتم برنامه فکر کنید.

قبل از شروع به نوشتن برنامه ابتدا باید درباره امنیت رمزها کمی اطلاعات داشته باشیم. بسیاری از رمزعبورها با استفاده از حدس زدن (انسان یا نرم افزار) پیدا می‌شوند. ولی هر چقدر که رمز عبور پیچیده‌تر باشد، پیدا کردن آن هم برای انسان و هم برای نرم افزار مشکل‌تر و زمانبرتر خواهد بود. پس همیشه سعی کنید رمز عبوری انتخاب کنید که پیچیده باشد. یعنی هم شامل حروف بزرگ و کوچک باشد، هم اعداد، هم حروف اضافه و هم شامل علائم باشد. همچنین طول (تعداد حرف) رمز عبور شما نیز بیشتر از ۸ حرف باشد. هرچه رمز عبور شما پیچیده‌تر و طول آن بیشتر باشد، امکان پیدا شدن آن نیز ضعیف‌تر و بسیار زمانبرتر خواهد بود.

 

در این برنامه برای تولید کدهای تصادفی نیاز به دو ماژول پایتون داریم:

ماژول 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

در پایان برای تست کردن امنیت رمز تولید شده می توانید از سایت زیر استفاده کنید.

سایت تست رمز تولید شده

 

 


در ادامه می توانید مطالعه کنید


 

محمد صداقتی

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.