هنگام تأیید کاربر یا انجام کاری مشابه، هرگز نباید رمز عبور را در متن ساده نگه دارید.
از آنجایی که بسیاری از افراد از رمز عبور یکسانی استفاده می کنند، اگر مهاجم پایگاه داده ای از رمزهای عبور رمزگذاری نشده را کشف کند، به راحتی می توان از آنها همراه با ایمیل های منطبق برای ورود به وب سایت یا حساب پیوند شده استفاده کرد و حتی برای تلاش برای دسترسی به حساب های دیگر استفاده کرد.
امروزه هنگام ارائه رمز عبور اغلب هش می شوند. توصیه می شود با نمک هش کنید و نمک را همراه با رمز عبور هش شده نگه دارید.
نمک زدن ممکن است یکی از مراحل دستور پخت هش براون به نظر برسد، اما در رمزنگاری، به اضافه کردن دادههای تصادفی به ورودی تابع هش اشاره دارد تا اطمینان حاصل شود که هش همیشه یک نتیجه منحصر به فرد ارائه میکند، حتی اگر ورودیها یکسان باشند.
در نتیجه، هش متمایز ایجاد شده با افزودن نمک میتواند از ما در برابر چندین روش حمله، از جمله حملات جدول هش، دفاع کند، در حالی که تلاشهای آفلاین دیکشنری و brute-force را خفه میکند.
در اینجا، با کمک تکههای کد، نحوه استفاده از «bcrypt» برای ایمن کردن رمزهای عبور خود را نشان خواهیم داد.
بنابراین، "bcrypt" چیست؟
Bcrypt یک کتابخانه هش است که از چندین زبان پشتیبانی می کند و رمزگذاری رمز عبور خاصی را ارائه می دهد. برای افزایش امنیت رمز عبور شما، هنگام رمزگذاری رشته شما، به طور خودکار کاراکترهای تصادفی اضافی (salt) تولید می کند.
همچنین می توانید تعیین کنید که چه تعداد کاراکتر اضافی را می خواهید به یک رشته ورودی اضافه کنید.
کتابخانه bcrypt فقط کد بایتی را می خواند نه رشته های خام. بنابراین، قبل از ارسال یک رشته رمز ورودی به bcrypt برای رمزگذاری، ابتدا باید آن را رمزگذاری کنید.
رمزگذاری و رمزگذاری یک چیز نیستند. فقط مطمئن می شود که یک رشته قبل از پوشاندن توسط یک تکنیک رمزگذاری توسط ماشین قابل خواندن است.
استفاده از bcrypt برای رمزگذاری رمز عبور در پایتون
پایتون رمزگذاری رمز عبور bcrypt را ساده می کند. ما بر انجام این کار بدون کمک یک چارچوب تمرکز خواهیم کرد. اما نگران نباشید، اگر می دانید که چگونه ورودی های کاربر را ذخیره کنید و آنها را از پایگاه داده بخوانید، رویه در فریمورک ها یکسان است.
نصب و راه اندازی
شما فقط باید یک محیط مجازی پایتون راه اندازی کنید و سپس از یک IDE مانند PyCharm استفاده کنید. ابتدا کتابخانه باید نصب شود:
رمزگذاری رمز عبور
بیایید ببینیم چگونه از bcrypt برای رمزگذاری یک متن پس از نصب آن استفاده کنیم:
کد پایتون فوق الذکر یک رشته بایت رمزگذاری شده را اجرا و خروجی می کند. اما هر بار که اسکریپت را اجرا می کنید، نتیجه متفاوت است. Bcrypt از این روش استفاده می کند تا مطمئن شود هر کاربر رمز عبوری دارد که به طور خاص رمزگذاری شده است.
اتفاقاً برای رمزگذاری رمز عبور است.
مقایسه و تایید رمز عبور با استفاده از Bcrypt
اگر بخواهید رمز عبور هش شده را ذخیره کنید و بعداً بررسی کنید که آیا با رمز عبور ارسال شده توسط کاربر برای احراز هویت مطابقت دارد، چه اتفاقی میافتد؟
این ساده است. فقط رمز عبور احراز هویت باید با ورودی پایگاه داده (یا در این مورد در حافظه) مقایسه شود.
رمز عبور احراز هویت نیز باید قبل از مقایسه با رمز عبور در پایگاه داده رمزگذاری شود زیرا bcrypt فقط می تواند رشته های بایت را بخواند. اساسا، شما یک ورودی احراز هویت کدگذاری شده را با رمز عبور رمزگذاری شده ای که در حال حاضر در پایگاه داده خود دارید مقایسه می کنید.
بیایید این را با استفاده از ورودی های ساختگی پایتون آزمایش کنیم:
پس از اجرای کد فوق، از شما یک رمز عبور جدید خواسته می شود. این توسط پایتون در حافظه ذخیره می شود. در بخش احراز هویت، همان رمز عبور را که برای شما خصوصی است، وارد خواهید کرد.
اگر رمز عبور با رمز عبوری که قبلاً رمزگذاری شده و مطابقت را ذخیره کرده است مقایسه شود، پایتون یک پیام موفقیت آمیز منتشر می کند.
اگر نه، پیغام خطا چاپ می شود و سپس جمله else اضافه می شود.
ایده اصلی با ایده ثبت نام و سپس ارائه رمز عبور به پایگاه داده برای احراز هویت یکسان است.
نتیجه
حتی در حالی که ما به سادگی از رمزهای عبور رمزگذاری شده برای نشان دادن نحوه عملکرد bcrypt در حافظه کوتاه پایتون ساده استفاده کرده ایم، کاربرد واقعی آن در برنامه های مبتنی بر کاربر نهفته است.
با این وجود، این مقاله روشهای ضروری برای سازماندهی کد خود را برای انجام این کار، حتی در شرایط دنیای واقعی، نشان میدهد.
به عنوان مثال، اگر از Flask استفاده می کنید، می توانید فیلدهای ثبت نام و احراز هویت را به جای ورودی ها از طریق فرم های وب جداگانه ارائه دهید.
البته، هنگام مقایسه رمزهای عبور، از پایگاه داده ای که حاوی گذرواژه های رمزگذاری شده است که در دنیای واقعی نگهداری می شوند، مطالعه خواهید کرد.
جونا نیچ
ممنون از این توضیح ساده و ساده
این به من در پروژه فعلی کمک زیادی کرد.
من فکر میکنم خیلی خوب است که کد نمونه به حداقل حداقل محدود باشد و مانند بسیاری از توضیحات دیگر بیش از حد بارگذاری نشود.
با احترام