بایگانی برچسب‌ها : dictionary

آرایه انجمنی Associative array

آرایه انجمنی یا Associative array چیست؟

آرایه انجمنی (Associative array) در زبان‌های برنامه‌نویسی یک نوع داده‌ی انتزاعی است متشکل از مجموعه‌ای از دوتایی‌های (کلید، مقدار) یا (Key, Value) به طوری که هر مقدار با یک کلید در تناظر می‌باشد و کلیدهای موجود در مجموعه نیز تکراری نباشند. آرایه‌های انجمنی با نام‌هایی همچون نقشه (Map) و لغت نامه (Dictionary) نیز شناخته می‌شوند.

در آرایه‌های انجمنی تناظر میان کلیدها و مقادیر اصطلاحا اتصال (Binding) نامیده می‌شود. مهم‌ترین و رایج‌ترین اعمالی که روی این نوع داده قابل انجام می‌باشد عبارت است از افزودن (Insert یا Add) یک جفت کلید و مقدار به مجموعه، حذف (Remove یا Delete) یک جفت کلید و مقدار، تغییر مقدار تخصیص یافته به یک کلید و یافتن مقدار متناظر با یک کلید. برای افزودن یک جفت کلید و مقدار یا تغییر مقدار متناظر با یک کلید لازم است هم کلید و هم مقدار متناظر با آن در قالب آرگومان مشخص شود اما حذف یا یافتن مقدار متناظر با یک کلید تنها مبتنی بر کلید انجام می‌شود.

دو روش مهم برای ایجاد آرایه‌های انجمنی، استفاده از جدول درهم سازی (Hash table) و درخت جستجو (Search tree) می‌باشد. بسیاری از زبان‌های برنامه‌نویسی امروزی از آرایه‌های انجمنی تحت عناوین متفاوتی در قالب کتابخانه‌های استاندارد خود پشتیبانی می‌کنند (برای مثال در بسیاری از زبان‌ها از جمله C++، آرایه‌های انجمنی با عنوان map شناخته می‌شوند).

مالتی‌مپ (multimap) ها نوع داده‌ی مرتبط دیگری هستند که مفهوم آرایه‌ی انجمنی را توسعه داده و اجازه می‌دهند چندین مقدار به یک کلید معین تخصیص داده شود. در نقشه‌های دوطرفه (Bidirectional map) نیز اتصال در هر دو جهت معنا می‌یابد و در آن‌ها علاوه بر اعمال معمول آرایه‌های انجمنی، امکان یافتن کلید متناظر با یک مقدار نیز وجود دارد.

در مثال زیر نحوه‌ی ایجاد یک آرایه انجمنی به نام $weight در زبان PHP نمایش داده شده است. در این نمونه، 3 جفت کلید و مقدار در مجموعه مشاهده می‌شود که عبارات Alex و Rory و Paul کلیدهای این آرایه انجمنی هستند و مقادیر 40 و 50 و 45 به ترتیب به آنها تخصیص داده شده است. در این مثال عبارت $weight[‘Paul’] مقدار متناظر با کلید Paul یعنی 45 را خواهد داشت.

$weight = array("Alex"=>"40", "Rory"=>"50", "Paul"=>"45");
echo "Paul weighs" . $weight['Paul'] . " kilograms.";

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

حمله لغت نامه ای Dictionary Attack

حمله لغت نامه ای یا Dictionary Attack چیست؟

حمله لغت نامه ای (Dictionary Attack) در علوم رایانه، به روشی گفته می‌شود که در آن متجاوز تلاش می‌کند با امتحان کردن مجموعه‌ای از واژه‌های رایج، کلید رمزگشایی یا کلمه عبور یک سیستم تعیین اعتبار را به دست آورد.

به عبارت بهتر، در حملات لغت نامه ای، فرد حمله کننده لیستی از واژه‌ها، عبارات و حتی ترکیب حروف، ارقام و نمادها را مورد استفاده قرار می‌دهد که از احتمال بیشتری برای انتخاب شدن به عنوان رمز برخوردار هستند.

برخلاف حملات بروت فورس (که در آن‌ها به صورت سیستماتیک فضای کلید بسیار بزرگی مورد تست قرار می‌گیرد)، در حملات مبتنی بر لغت‌نامه تنها عباراتی که رایج‌تر هستند بررسی می‌شود. بنابراین در صورتی که کاربر از یک رمز عبور پیچیده و غیر رایج استفاده کند امکان موفقیت متجاوز در حمله لغت‌نامه‌ای بسیار پایین خواهد بود. اما جالب است بدانید متأسفانه بسیاری از افراد برای تسهیل به خاطر سپردن رمز عبور خود، از رمزهای ساده‌ای همچون 123456 و یا qwerty استفاده می‌کنند که حتی بدون استفاده از یک لغت‌نامه کامل نیز به سرعت قابل شناسایی می‌باشد!

نرم‌افزارهای متعددی برای انجام حملات لغت‌نامه‌ای طراحی شده است (که طبق قوانین مجاز به ذکر اسامی آن‌ها نیستیم). البته ذکر این نکته ضروری است که در این نوع حملات، هرچه لغت‌نامه‌ی مورد استفاده دارای عبارات بیشتری (در حد میلیون‌ها عدد!) باشد، احتمال موفقیت حمله و هم‌چنین زمان مورد نیاز برای بررسی تمام لغات افزایش خواهد یافت. در برخی از لغت‌نامه‌ها، عبارات رایج‌تر در ابتدای لیست قرار داده می‌شوند که به این ترتیب شکستن رمزهای متداول آسان‌تر می‌شود. بنابراین به شما توصیه می‌کنیم برای غلبه بر این نوع حملات از رمزهای عبور پیچیده، ترجیحا بدون معنا و مفهوم و در عین حال ترکیبی از حرف، رقم و نماد استفاده کنید به طوری که مطمئن شوید نه تنها رمزتان در هیچ لغت‌نامه‌ای یافت نمی‌شود بلکه کار را برای سایر روش‌ها مثل حمله بروت فورس نیز بسیار دشوارتر کرده‌اید.

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا