تحلیل ۲ میلیون گذرواژه در R، بخش اول

مدتی پیش این پست در وبسایت data science central نظرم را جلب کرد، نویسنده، لینکی به یک فایل متنی ۲۰ مگابایتی که حاوی حدود ۲ میلیون گذرواژه بدست آمده از ایمیلهای به سرقت رفته است را به اشتراک گذاشته و از بقیه خواسته تا با مهارتهایشان این فایل را تحلیل کنند. تحلیل کاربری به نام Jianhua Li  از این فایل در گیتهاب نظر مرا به خود جلب کرد و از آنجایی که این تحلیل در پایتون( پیتون؟) انجام شده بود، تصمیم گرفتم آن را در R انجام دهم.

بعد از دانلود فایل، آن را در working directory قرار می‌دهیم. فایل متنی به صورتی است که در هر خط آن یک پسورد نوشته شده، برای همین دستوری لازم داریم که آن را خط به خط بخواند و در ‌‌R وارد کند:

(این نکته را در نظر داشته باشید که اول فایل متنی چند خط کامنت وجود دارد که باید پاک شود. بعد از خواندن فایل سر و ته آن را سرکی می‌کشیم:

در فایل دقیقا چند پسورد وجود داشته؟ با یک دستور ساده جواب را به دست می‌آوریم:

دستور nchar تعداد کاراکترهای یک string را در R تحویل می‌دهد( space هم در این دستور یک کاراکتر محسوب می‌شود)، با ترکیب این دستور و دستور summary ، می‌توانیم ببینیم که متوسط طول پسوردها در چه محدوده‌ای است و مینیمون و ماکسیمم و میانگین آن را بدست آوریم:

رسم نمودار box plot طول گذرواژه‌ها، نشان می‌دهد که بیشتر آنها بین ۸ تا ۱۰ کاراکتری هستند:

rplot01

هیستوگرام طول پسوردها شاید نمودار گویاتری نسبت به نمودار جعبه‌ای آن باشد:

rplot02

 

معمولا گفته می‌شود که یک پسورد قوی باید حداقل ۸ کاراکتر شامل یک حرف بزرگ، یک حرف کوچک، یک عدد و یک کاراکتر ويژه( @#!$ ... ) باشد، یک چیزی در این مایه‌ها:

password-requirements

نکته بی‌ربط به این پست: بعضی‌ها می‌گویند پسورد را باید به این صورت بسازیم:

password_strength

برای این که بفهمیم چه بخشی از این پسوردها قوی هستند، باید تعداد کاراکترها، تعداد حروف/ حروف بزرگ، اعداد و کاراکترهای ویژه‌ی انها را بشماریم. بهترین ابزار برای این کار، استفاده از regex و تابع grep است. اگر نمی‌دانید regex چیست، این ویدیوی جادی را ببینید. برای این که ببینیم چه درصدی از پسوردها شامل عدد هستند، کافی است تعدادشان را بشماریم، به تعداد کل پسوردها تقسیم کنیم و در صد ضرب کنیم، به همین راحتی:

برای نشان دادن این داده در یک نمودار pie می‌توانیم از دستور زیر استفاد کنیم:

rplot

همانطور که می‌بینید، نمودار pie، چندان نمودار گویا و بدرد بخوری نیست و به طور کلی توصیه می‌شود که از آن استفاده نکنید. بهتر است ترکیب هر پسورد را در قالب ستون‌هایی به داده اضافه کنیم:

حاصل این کدها یک دیتافریم به شکل زیر است:

هم‌اکنون به راحتی می‌توانیم درصد‌هایی که نیار داشتیم را محاسبه کنیم:

تمامی این درصدها را در قالب یک نمودار می‌توان نشان داد:

rplot02در مرحله‌ی بعدی می‌خواهیم روی ترکیب کاراکترهای گذرواژه‌ها با طولهای مشخص، تحلیلی انجام دهیم، درصد کاراکترهای تشکیل دهنده‌ی گذرواژه‌ها را از مراحل قبلی داریم، برای این تحلیل می‌توانیم یک تابع به صورت زیر بنویسیم:

با استفاده از این تابع تحلیل مورد نظر به راحتی انجام می‌شود:

با کمک پکیج‌های reshape2 و ggplot2 یک نمودار بسیار زیبا از تحلیل ترکیب گذرواژه‌ها با طولهای مختلف می‌سازیم:

rplot03

نموداری که ساختیم، در یک نگاه نشان می‌دهد که کسانی که از گذرواژه‌هایی با طول بین ۵ تا ۱۳ استفاده می‌کنن تمایل چندانی به استفاده از علائم خاص در گذرواژه ندارند. در قسمت بعدی این پست، سعی می‌کنیم با استفاده از فرمولهایی که توسط سایتهای بررسی قدرت پسورد ارایه شده، خودمان قدرت این پسوردها را محاسبه کنیم.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *