خب، قصد دارم یک برنامه پایتون برای ساخت رمزهای قوی و غیرقابل هک بنویسم. اول باید ببینم رمز قوی چه ویژگیهایی داره. معمولاً طول زیاد، ترکیب حروف بزرگ و کوچیک، اعداد و کاراکترهای خاص لازمه. پس باید این موارد رو در نظر بگیرم.
اول فکر میکنم که باید از ماژول random استفاده کنم تا کاراکترها رو به صورت تصادفی انتخاب کنم. همچنین ممکنه نیاز به ماژول string باشه تا مجموعه کاراکترهای لازم رو به دست بیارم. مثلاً string.ascii_letters برای حروف بزرگ و کوچیک، string.digits برای اعداد و string.punctuation برای کاراکترهای خاص. سپس باید طول رمز رو تعیین کنم. معمولاً توصیه میشه حداقل 12 کاراکتر باشه. شاید بهتره کاربر بتونه طول رو مشخص کنه، پس یک پارامتر اختیاری برای تابع در نظر میگیرم.
مطمئن بشم که رمز ساخته شده حداقل از هر دسته کاراکتر یک نمونه داره. مثلاً یک حرف بزرگ، یک حرف کوچیک، یک عدد و یک کاراکتر خاص. اینطوری احتمال ضعیف بودن رمز کمتر میشه. بعد از ساخت رمز، باید بررسی کنم که آیا شرایط رو داره یا نه. اگر نه، دوباره رمز بسازم. اینجا ممکنه یه حلقه while لازم باشه تا زمانی که تمام شرایط برقرار بشه. همچنین باید به کاربر امکان انتخاب سطح امنیت رو بدهم. مثلاً سطح پایین فقط حروف و اعداد، سطح متوسط حروف، اعداد و کاراکترهای خاص، و سطح بالا همه موارد با طول بیشتر. این قسمت رو شاید با پارامتر دیگهای به تابع اضافه کنم. ممکنه کاربر بخواد رمزهای بیشتری ایجاد کنه، پس تابع رو طوری طراحی کنم که بتونه چندین رمز رو تولید کنه و نمایش بده.
خرید سرور مجازی پرسرعت با قیمت اقتصادی از رادیب، کلیک کنید
بعد از نوشتن تابع اصلی، باید یک مثال از نحوه استفاده از تابع رو هم قرار بدم تا کاربر بتونه به راحتی ازش استفاده کنه. همچنین توضیحاتی درباره پارامترها و خروجی تابع اضافه کنم. مهمتر از همه، باید مطمئن بشم که از منابع امن برای تولید اعداد تصادفی استفاده میکنم. ماژول secrets در پایتون برای این منظور مناسب تره چون از نظر رمزنگاری امنتره. پس بهتره به جای random از secrets استفاده کنم. در نهایت، تست میکنم که کد به درستی کار میکنه و تمام شرایط رو رعایت میکنه. مثلاً چک میکنم که طول رمز درست باشه و همه دستههای کاراکتر لازم رو داشته باشه.
در اینجا یک برنامه پایتون برای تولید رمزهای عبور قوی و غیرقابل حدس ارائه میشود که از اصول امنیتی مدرن پیروی میکند با این آموزش از رادیب همراه باشید:
import secrets
import string
from typing import List
def generate_strong_password(length: int = 16,
include_uppercase: bool = True,
include_lowercase: bool = True,
include_digits: bool = True,
include_symbols: bool = True,
exclude_similar: bool = True) -> str:
"""
یک رمز عبور قوی با مشخصات دلخواه تولید میکند
پارامترها:
length: طول رمز عبور (حداقل 12 توصیه میشود)
include_uppercase: شامل حروف بزرگ
include_lowercase: شامل حروف کوچک
include_digits: شامل اعداد
include_symbols: شامل نمادها
exclude_similar: حذف کاراکترهای مشابه مانند Il1O0
"""
# تعریف مجموعه کاراکترها
characters = []
uppercase = string.ascii_uppercase
lowercase = string.ascii_lowercase
digits = string.digits
symbols = '!@#$%^&*()_+-=[]{}|;:,.<>?'
# حذف کاراکترهای مشابه اگر درخواست شده باشد
if exclude_similar:
uppercase = uppercase.translate(str.maketrans('', '', 'IO'))
lowercase = lowercase.translate(str.maketrans('', '', 'l'))
digits = digits.translate(str.maketrans('', '', '01O'))
symbols = symbols.translate(str.maketrans('', '', '|;<>'))
# جمعآوری کاراکترهای انتخابی
if include_uppercase:
characters.append(uppercase)
if include_lowercase:
characters.append(lowercase)
if include_digits:
characters.append(digits)
if include_symbols:
characters.append(symbols)
# بررسی حداقل شرایط
if not characters:
raise ValueError("حداقل یک نوع کاراکتر باید انتخاب شود")
# تولید رمز عبور با امنیت بالا
all_chars = ''.join(characters)
password = []
# اطمینان از وجود حداقل یک کاراکتر از هر دسته انتخابی
for charset in characters:
password.append(secrets.choice(charset))
# پر کردن باقیمانده طول رمز
for _ in range(length - len(characters)):
password.append(secrets.choice(all_chars))
# ترکیب تصادفی کاراکترها
secrets.SystemRandom().shuffle(password)
return ''.join(password)
# مثال استفاده:
if __name__ == "__main__":
# تولید 5 رمز 20 کاراکتری با تمام ویژگیها
print("رمزهای عبور قوی:")
for _ in range(5):
password = generate_strong_password(length=20)
print(f"• {password}")
# تولید رمز 16 کاراکتری بدون نمادها
simple_pass = generate_strong_password(include_symbols=False)
print(f"\nرمز بدون نماد: {simple_pass}")
ویژگیهای امنیتی این الگوریتم:
خرید سرور ابری ساعتی مناسب برای تست کدهای شما، کلیک کنید
1. از ماژول `secrets` به جای `random` استفاده میکند که برای اهداف امنیتی مناسبتر است
2. به طور پیشفرض رمزهای 16 کاراکتری تولید میکند
3. حذف کاراکترهای مشابه به صورت اختیاری (مانند 1 و l و I)
4. تضمین وجود حداقل یک کاراکتر از هر دسته انتخابی
5. ترکیب تصادفی پیشرفته با استفاده از shuffle امن
6. قابلیت تنظیم دقیق انواع کاراکترها
7. تولید کاراکترها با توزیع یکنواخت
مزایای این روش نسبت به الگوریتمهای معمول:
- مقاوم در برابر حملات brute-force
- جلوگیری از الگوهای قابل پیشبینی
- حذف کاراکترهای مبنا (برای کاهش خطا در ورودی)
- استفاده از منبع امن برای اعداد تصادفی
- انعطافپذیری در تنظیمات امنیتی
توصیهها برای استفاده ایمن:
1. حداقل طول 12 کاراکتر استفاده شود
2. تمام انواع کاراکترها را فعال کنید
3. از رمزهای تولید شده در سرویسهای مختلف استفاده مجدد نکنید
4. رمزها را در یک مدیر رمز عبور امن ذخیره کنید
5. هر 3-6 ماه رمزهای مهم را بهروزرسانی کنید


