ساخت پسورد قوی با پایتون


داشتن یک پسورد ضعیف و یا یک رمز عبور در همه جا مشکل ساز و در برخی اوقات خطرناک است. در این مقاله ساخت پسورد قوی با پایتون را خواهید آموخت. قبل از هر چیز باید رمزگذاری و تکنیک های آن را بدانیم، برای داشتن یک پسورد خوب چند اصل را باید در نظر بگیریم: ۱- طول کاراکتر
۲- نوع کاراکتر و ۳- پیچیدگی آن.
- طول کاراکتر این پارامتر باید مقدار بهینه ای داشته باشد. یعنی نه کم باشد که قابل حدس و یا محاسبه برای کامپیوتر باشد و نه اینقدر طولانی که غیر قابل نگهداری در ذهن باشد. مقدار توصیه شده در اکثر سایت ها ۸ و بیشتر از ۸ کاراکتر است، زیرا جایگشت های این عدد به بالا از سختی مناسبی برخوردار است.
- نوع کاراکتر باید شامل مواردی چون: عدد ، حروف (بعضاً کوچک و یزرگ) و علائمی
مانند: $ ، ! @ و غیره باشد. - پیچیدگی شامل ترکیبی از عناصر بالا که قابل حدس نبوده ولی کاربر آن را بفهمد و فراموش نکند.
ساخت پسورد قوی با پایتون
خب رسیدیم به قسمت کد نویسی ویژگی هایی که برنامه ما دارد به شرح زیر است:
- طول پسورد خروجی ما ۱۰ کاراکتر است ولی شما می توانید آن را تغییر دهید.
- نوع کاراکتر شامل حروف بزرگ و کوچک انگلیسی، اعداد و علائم آن است.
- در پیچدگی آن نیز از کتابخانه و توابع رندم (random) استفاده کردیم.
- توجه کنید برای کپی کردن کد اعداد آن را به انگلیسی تغییر دهید.
توضیحات کد:
MAX_LEN حداکثر طول پسورد تولیدی را مشخص می کند. همان طور که می بینید کتابخانه ای برای استفاده از مجموعه یا همان آرایه به برنامه اضافه کردیم و در چهار پارامتر DIGITS ، LOCASE_CHARACTERS ، UPCASE_CHARACTERS ، SYMBOLS از آن استفاده کردیم. سپس هر کدام از متغیر های زیر را به تابع رندم دادیم، و هر یک را در متغییری جدا دخیره کریم و بعد در متغیر temp_pass آنان را به هم چسباندیم که ۴ کاراکتر آن ساخته می شود و برای بقیه با استفاده از توابع array و random و حلقه for همان طور که در کد ها می بینید، آن ها را ساختیم.
حلقه for هشت بار تکرار می شود تا بقیه کارکتر ها را تولید کند. در نهایت نتیجه
حقله فوق را در for نهایی با اضافه کردن به رشته password آن را ساخته و در نهایت چاپ می کند.
import random
import array
# maximum length of password needed
# this can be changed to suit your password length
MAX_LEN = 12
# declare arrays of the character that we need in out password
# Represented as chars to enable easy string concatenation
DIGITS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
LOCASE_CHARACTERS = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'm', 'n', 'o', 'p', 'q',
'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
'z']
UPCASE_CHARACTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'M', 'N', 'O', 'p', 'Q',
'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
'Z']
SYMBOLS = ['@', '#', '$', '%', '=', ':', '?', '.', '/', '|', '~', '>',
'*', '(', ')', '<&# 039]
# combines all the character arrays above to form one array
COMBINED_LIST = DIGITS + UPCASE_CHARACTERS + LOCASE_CHARACTERS + SYMBOLS
# randomly select at least one character from each character set above
rand_digit = random.choice(DIGITS)
rand_upper = random.choice(UPCASE_CHARACTERS)
rand_lower = random.choice(LOCASE_CHARACTERS)
rand_symbol = random.choice(SYMBOLS)
# combine the character randomly selected above
# at this stage, the password contains only 4 characters but
# we want a 12-character password
temp_pass = rand_digit + rand_upper + rand_lower + rand_symbol
# now that we are sure we have at least one character from each
# set of characters, we fill the rest of
# the password length by selecting randomly from the combined
# list of character above.
for x in range(MAX_LEN - 4):
temp_pass = temp_pass + random.choice(COMBINED_LIST)
# convert temporary password into array and shuffle to
# prevent it from having a consistent pattern
# where the beginning of the password is predictable
temp_pass_list = array.array(&# 039;u&# 039;, temp_pass)
random.shuffle(temp_pass_list)
# traverse the temporary password array and append the chars
# to form the password
password = ""
for x in temp_pass_list:
password = password + x
# print out password
print(password)
کد رو به صورت زیر اصلاح کردم حالا میشه چندتا پسورد داشت بعد هر اجرا البته با یه الگوریتم ساده تر هم میشد همین حرکت رو پیاده کرد ولی اینم جالب بود اینم خیلی ممنون بابت این مطلب
#!/usr/bin/python3.8
import random
import array
DIGITS = [‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’]
LOCASE_CHARACTERS = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’,
‘i’, ‘j’, ‘k’, ‘m’, ‘n’, ‘o’, ‘p’, ‘q’,
‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’, ‘y’,
‘z’]
UPCASE_CHARACTERS = [‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’,
‘I’, ‘J’, ‘K’, ‘M’, ‘N’, ‘O’, ‘p’, ‘Q’,
‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’, ‘X’, ‘Y’,
‘Z’]
SYMBOLS = [‘@’, ‘#’, ‘$’, ‘%’, ‘=’, ‘:’, ‘?’, ‘.’, ‘/’, ‘|’, ‘~’, ‘>’,
‘*’, ‘(‘, ‘)’, ‘<&# 039']
COMBINED_LIST = DIGITS + UPCASE_CHARACTERS + LOCASE_CHARACTERS + SYMBOLS
MAX_LEN = 12
NUMBER_OF_PASSWORD = 2
for i in range(NUMBER_OF_PASSWORD):
rand_digit = random.choice(DIGITS)
rand_upper = random.choice(UPCASE_CHARACTERS)
rand_lower = random.choice(LOCASE_CHARACTERS)
rand_symbol = random.choice(SYMBOLS)
temp_pass = rand_digit + rand_upper + rand_lower + rand_symbol
password = ""
for x in range(MAX_LEN – 4):
temp_pass = temp_pass + random.choice(COMBINED_LIST)
temp_pass_list = array.array("u", temp_pass)
random.shuffle(temp_pass_list)
for x in temp_pass_list:
password = password + x
print(password)