<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های &quot;Mahdi&quot;</title>
        <link>https://virgool.io/feed/@MahdiZarepoor</link>
        <description>مینویسم، پس هستم</description>
        <language>fa</language>
        <pubDate>2026-06-16 18:14:43</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/184597/avatar/nclxp7.jpg?height=120&amp;width=120</url>
            <title>&quot;Mahdi&quot;</title>
            <link>https://virgool.io/@MahdiZarepoor</link>
        </image>

                    <item>
                <title>لینوکس؛ فایل سیستم، Inode و لینک ها</title>
                <link>https://virgool.io/@MahdiZarepoor/%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D9%81%D8%A7%DB%8C%D9%84-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-inode-%D9%88-%D9%84%DB%8C%D9%86%DA%A9-%D9%87%D8%A7-u8axez0gbh9n</link>
                <description>در سیستم‌عامل لینوکس، مفهوم آینود‌ها (Inodes) اساسی برای مدیریت فایل‌ها و دایرکتوری‌ها در سیستم فایل می‌باشد. آینود‌ها نقش کلیدی در اختصاص حافظه، نام‌گذاری فایل‌ها، دسترسی به آن‌ها و مدیریت فضای دیسک دارند. در این مقاله، به بررسی مفهوم آینود‌ها، وظایف آن‌ها و نحوه عملکرد آینود‌ها در سیستم‌عامل لینوکس می‌پردازیم.هارد دیسک ها ساختار بلوکی دارند . این بلوک ها نوعی واحد تقسیم بندی فضای دیسک میباشند که ذخیره سازی و دسترسی راحت تر به داده ها را فراهم میکنند . تعداد بایت های تشکیل دهنده‌ی یک بلوک متغیر است و در زمان ساختن پارتیشن میتوان مقدار آن را مشخص کرد.  با دستور زیر میتوان فهمید که در پارتیشن مشخص شده هر بلوک از چند بایت تشکیل شده است .  sudo blockdev --getbsz /dev/sdX زمانی که یک فایل جدید میسازیم با توجه به اندازه‌،  این فایل میتواند یک یا بیشتر از یک بلوک را اشغال کند . نکته‌ی حائز اهمیت این است که بلوک های تشکیل دهنده یک فایل لزوما پشت سر یکدیگر و به صورت خطی نیستند . دلایل زیادی برای ذخیره‌ی غیر خطی بلوک های تشکیل دهنده‌ی یک فایل وجود دارد اما شاید اصلی ترین دلیل توانایی افزایش اندازه‌ی فایل با دردسر کمتر باشد . پس تا به اینجا فهمیدیم که هارد دیسک ها ساختار بلوکی دارند و فایل ها نیز در صورت نیاز به بیش از یک بلوک در بلوک های مختلف که معمولا کنار یکدیگر نیستند ذخیره میشوند . حال این سوال پیش می‌آید که اگر بخواهیم یک فایل را از روی دیسک بخوانیم چگونه میتوان مکان دقیق بلاک های تشکیل دهنده‌ی این فایل را پیدا کرد ؟پاسخ : Inode آینود نوعی ساختمان داده شبیه به مپ است که اطلاعاتی در مورد فایل بجز  محتوای فایل و نام فایل را ذخیره میکند . معمولا آینودها در ابتدای هر پارتیشن قرار میگیرند .  زمانی که فایلی ساخته میشود، علاوه بر محتویات فایل که بر روی دیسک ذخیره میشوند یک آینود هم برایش ساخته شده که اطلاعاتی زیر را در مورد فایل ذخیره میکند : سطوح دسترسی به فایل تاریخ  آخرین تغییر ایجاد شدهسایز فایل گروه و مالک فایل مکان محتویات فایل بر روی دیسک ( بلاک های تشکیل دهنده‌ی محتویات فایل)سایر نه تنها برای فایل های معمولی بلکه برای هر دایرکتوری، فایل بلاک و فایل کرکتر نیز یک آینود ساخته میشود  زمانی که در سیستم عامل فایلی میسازیم، سیستم عامل نام فایل + ادرس آینود مربوط به فایل را در محل مربوطه در فایل سیستم نگهدرای میکند (نوعی ساختمان داده درخت) . این ساختار به ما این اجازه را میدهد که برای هر فایل نام های مختلفی بسازیم . بدین صورت که نام های مختلف همگی آینود های یکسان داشته که اساس کار hardlink ها در لینوکس نیز به همین صورت است . در ادامه به بررسی چند دستور کاربردی مربوط به آینود ها و لینک ها میپردازیم sssssدستور بالا اطلاعات مربوط به آینود های هر دیوایس متصل به دستگاه را نشان میدهدبا اضافه کردن آپشن i- به کامند ls میتوان آینود هر فایل را نیز در ستون اول مشاهده کرد کامند stat اطلاعات بیشتری در مورد فایل را نشان میدهد . از جمله متادیتای فایل که در آینود ذخیره شده است دستورات مربوط به ساختن لینک :$ ln file link #Creates a hard link from the given file$ ln -s item link  #Creates a soft link from the given file or directoryاین چند تصویر هم برای درک بهتر مفاهیم گفته شده میتونه مفید باشه : </description>
                <category>&quot;Mahdi&quot;</category>
                <author>&quot;Mahdi&quot;</author>
                <pubDate>Fri, 11 Aug 2023 10:53:01 +0330</pubDate>
            </item>
                    <item>
                <title>تفاوت sequenatial, synchronous, asynchronous</title>
                <link>https://virgool.io/@MahdiZarepoor/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-sequenatial-synchronous-asynchronous-xaf5cmgyuoks</link>
                <description>توی این پست میخوام با سه تا مثال از دنیای واقعی تفاوت های این سه که ممکنه زیاد اسمشون به گوشتون خورده یا حتی بر اساسشون کد نوشتید رو بیان کنم.مثال اول : انجام دادن کار های اداری به صورت sequential احتمالا کم و بیش با یکسری کارهای اداری سر و کار داشتید . فرض کنید که به شما گفته شده که باید اول برید پیش آقای A و اون آقا نامه ای به شما میده سپس اون نامه رو ببرین طبقه ی اول پیش خانم B و اونجا هم یه امضا بزنه و یه چیز اضافه کنه و در نهایت این رو ببرید پیش رئیس تا کارتون تموم بشه . خوب توی این تسک به شما یک دستورالعمل داده شده که دارای ترتیب هست و شما نمیتونید قبل از اینکه امضای آقای A رو داشته باشید برید پیش رئیس . باید دقیقا طبق ترتیب انجام شده پیش برید و حتی اگه همراه با دوستتون هم باشید بازهم نمیتونید یکی از این وظایف رو بدید به دوستتون و بگید فرضا تا موقعی که من میرم پیش اقای A تو برو پیش خانم B و کارم رو انجام بده ( چرا که برای انجام کار پیش خانم B باید نامه ای که اقای A میده رو داشته باشید ) !!  مثال دوم : درست کردن ماکارونی به صورت synchronous فرض کنید میخواید ماکارونی درست کنید . توی اینترنت سرچ میکنید و متوجه میشید که شامل این مراحله :جوش آوردن آب پختن ماکارونی درست کردن مایع ماکارونی مخلوط کردن ماکارونی و مایع و دم کشیدن خوب، برای شروع اول آب رو توی قابلمه میریزیم و زیر گاز رو روشن میکنیم . حالا احتمالا باید ده دقیقه صبر کنیم تا آب جوش بیاد تا بتونیم ماکارونی رو اضافه کنیم . اما توی این چند دقیقه ما بیکار وای نمیستیم !!!‌  از فرصت استفاده میکنیم و درست کردن مایع ماکارونی رو هم شروع میکنیم . این مراحل با هم دیگه پیش میرن و بلخره یکیشون زودتر از اون یکی تموم میشه ( شاید هم دقیقا باهم تموم شدن ) اما در هر صورت برای انجام مرحله ی آخر ما باید صبر کنیم تا مراحل قبل به طور کامل تموم بشن . یه جورایی انجامِ‌ مرحله ی آخر وابسته به مراحل قبله . توی این مثال دیدیم که یه تسک که sequential بود و ترتیب داشت رو تونستیم یکسری از این ساب-تسک ها رو به صورت همزمان انجام بدیم ( جوش آمدن آب و درست کردن مایع ماکارونی‌ ) نتیجه ی مهمی که میشه گرفت اینه که بین مورد اول و دوم (‌ sequential &amp; synchronized ) تناقضی وجود نداره . یعنی اینکه یه برنامه میتونه در عین  sequential بودن، synchronous هم باشه . توی مثال درست کردن ماکارونی هم دیدیم که ذات درست کردن ماکارونی sequential هست و برای انجام تسک ها ترتیب داریم اما در عین حال میتونیم بعضی از این sub-task ها رو بصورت همزمان انجام بدیم  اما در نهایت بین بعضی از تسک ها وابستگی وجود داره مثال سوم : کارمند ها باهم asynchonous کار میکنند یک شرکت رو در نظر بگیرید که سه کارمند داره . نفر اولی حسابداره، دومی منشی و سومی برنامه نویسه . به هرکدوم از این سه نفر وظایف مختص خودش داده میشه . فرضا منشی باید ایمیل هایی که به شرکت زده شده رو بررسی کنه ،‌حسابدار باید سوابق دارایی شرکت رو بررسی کنه و برنامه نویس باید کدی که دیروز زده رو دیباگ کنه ??. این سه کارمند به صورت همزمان در حال انجام وظیفه شون هستند و امروز کار هیچکدومشون وابسته به اون یکی دیگه نیست. یعنی اینکه هیچ ترتیبی براشون مشخص نشده و وابستگی ای بین کار ها وجود نداره و در نتیجه هیچکدوم برای اون یکی نیاز نیست صبر کنه . برنامه های asynchronous هم دارای همچین ویژگی ای هستند و ساب-تسک ها به اصطلاح independent هستند و سوای از هم میتونن به صورت همزمان روی چند thread مختلف اجرا بشن .امیدوارم که این سه مثال تونسته باشه تفاوت بینشون رو براتون واضح کرده باشه . توی پست بعدی قراره تفاوتشون رو دقیق تر و توی دنیای برنامه نویسی و کد بررسی کنیم .  </description>
                <category>&quot;Mahdi&quot;</category>
                <author>&quot;Mahdi&quot;</author>
                <pubDate>Thu, 22 Dec 2022 13:11:40 +0330</pubDate>
            </item>
                    <item>
                <title>تفاوت Encryption , hashing , encoding قسمت دوم</title>
                <link>https://virgool.io/Whitenoise/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-encryption-hashing-encoding-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-qbu3gnr0r2w9</link>
                <description>تا به اینجای کار یک دیدِ کلی از رمزنگاری پیدا کردیم . در ادامه به hashing functions می پردازیم . یکی از اصلی ترین نیاز های جوامع بشری این است که بتوانند بین چیزهای مختلف فرق بگذارند . توانایی تشخیص دقیق افراد از یکدیگر یکی از اساس قانون و برقرای عدالت می باشد . فرض کنید معیاری برای تشخیص دقیق انسان ها از یکدیگر نبود . آنوقت افراد با ویژگی های ظاهری شبیه به هم میتوانستند هرکاری را به اسم فردی دیگر انجام دهند بدون در نظر گیری عواقب آن . در جامعه،  برای فایق آمدن بر این مشکل مفاهیمی به وجود آمدند مانند اثر انگشت . ویژگی ای ذاتی در انسان که به طرز شگفت انگیزی این مشکل را حل میکند . چرا که هیچ دو انسانی دارای اثر انگشت یکسانی نمی باشند . مثالِ دیگری از آن شماره ی ملی میباشد . شماره ای که به هر انسان داده میشود تا شناسایی آن در جامعه آسان تر باشد .  یا مثلا  یک نقاش پس از اتمام نقاشی ، امضای مخصوص خود را زیرنقاشی قرار میدهد تا با اینکار مانع از   استفاده ی بقیه ی  افراد از این نقاشی  به نام خودشان شود . او با این کار به قول معروف ، نقاشی اش را یوینیک ( unique ) می کند .امضایِ نقاشِ بزرگ ؛ وینست ون گوک در دنیای تکنولوژی هم این اصل یک نیاز است . بیاید یکبار دیگر مثال کبوتر نامه رسان را مرور کنیم . در مثال قبل با استفاده از جادویی به نام رمزگذاری ، توانستیم مانع از لو رفتن اطلاعاتمان شویم . اما هنوز یک مشکل وجود دارد . اگر کسی در نقطه ی C  بتواند کبوتر نامه رسان را به دام بیندازد و به نامه دسترسی پیدا کند ، می تواند به سادگی در محتوای نامه تغییر ایجاد کند . فرضا اگر نامه ای در مورد عذر خواهی بین طرفین باشد ، فردِ نقطه ی C میتواند چند بند به محتوای نامه اضافه کرده و درستی نامه را از بین ببرد . همین مثال را در ارتباطات بین کامپیوتر های بررسی کنیم . فرض کنید یک سِروِر در نقطه ی A قرار داره . افراد از نقاط مختلف میتونن به این سرور درخواست بزنند و سرور در جواب برای اون ها یک فایل ویدئویی که حاوی فیلم سینمایی  The Dark Knight هست رو بفرسته . یک سیستم در نقطه ی B درخواست رو میزنه و سرور هم در جواب براش این فایل رو میفرسته . حالا سوالی که پیش میاد اینه که اون فرد B از کجا بفهمه که این فایلی که روی سیستمش دانلود شده همون فایلی هست که روی سرور قرار داده شده ؟ چرا که ممکنه یک نفر در این بین محتویات دیتا رو تغییر داده باشه و فرضا یک ویروس خطرناک رو به دیتای مذکور اضافه کرده باشه .اینجاست که hash به کمک ما میاد .  توابعِ hash  توابعی هستند که دارای ویژگی های زیر باشند 1) اولین و اصلی ترین ویژگی آنها باید این باشد که یک طرفه باشند . یعنی با داشتن دیتای هش شده و تابعِ هش ، نشه به دیتای اولیه رسید . برعکس رمزگذاری که با داشتن دیتای انکریپت شده و کلید میشد به دیتای اولیه ( plain text ) رسید ، در هش این اتفاق نباید بیفته .2) توابع هش باید سریع باشند.یعنی نباید  تولید دیتای هش شده زمان زیادی ببره.3) هیچ دو ورودی غیر یکسانی نباید خروجی یکسان داشته باشند ( بسیار مهم ) .4) مهم نیست که دیتای ورودی که به تابع هش داده میشه اندازه اش چقدر باشه ، در هر صورت خروجی ای که تابعِ هش تولید میکنه باید اندازه اش یه مقدارِ ثابت ( فیکس ) باشه . یعنی  چه یک بایت به عنوان ورودی بهش بدیم چه 10 گیگابایت فرقی نداره ، در هر صورت تابع هش فرضا یه خروجی به طولِ 256 بایت تولید میکنه برامون.5) با یک تغییر کوچک در ورودی ، خروجی به مقدار خیلی زیادی فرق میکنه . البته همونطور که توی مورد شماره ی 4 گفتم اندازه یا طولِ خروجی فرقی نمیکنه ، فقط خودِ محتویات هش تغییر میکنن . مثال Mahdi.  ------------&gt; تابعِ هش  ------------&gt; qndq1wkWDc57nbniMahdi! ---------------&gt; همون تابعِ هش -----------&gt; iglw97aww0QQQacgفرایندِ هش کردنِ دیتابرگردیم به مثالِ سِروِرِمون . گفتیم که هش کردن ، مشکل مارو حل میکنه . اما چجوری ؟ با هش کردنِ اون فایلِ ویدئویی . یعنی سرور میاد و اون فایل رو میده به تابع هش ، اون تابع میادو یک خروجی به عنوان هش تولید میکنه . اون هش حکمِ امضای نقاش یا حکم اثر انگشت رو داره . چرا که هیچ دو فایل متفاوتی ، هشِ یکسان ندارند . پس روند کلی این شد : سرور یه رشته ی هش از اون فایل تولید میکنه فرضا اون رو به عنوان اسم فایل قرار میده . بعد از اینکه دیتا فرستاده شد به مقصد ( کلاینت )فرستاده شد ،  سرور چک میکنه که هش مربوط به اون فایل که توی سرور هست با هشِ فایلی که برای کلاینت فرستاده شد برابر باشه . اینطوری مطمئن میشه که فایل در حین انتقال ، دستکاری نشده .یک استفاده ی دیگه از هش : توی ارتباطات کامپیوتری پسورد ها نقش خیلی مهمی دارند و بدون اون ها عملا امنیتی وجود نداره . یکی از مشکلاتی که هست اینه که فرضا شما قراره به یک وبسایت یه درخواست (request) بفرستید و توی اون درخواست پسوردتون رو وارد کردید . خوب با این شرایط ، حتی با وجود اینکه دیتای شما رمزگذاری شده ، اگر یه نفر بتونه یه جوری دیتای شما رو به سرقت ببره یا به کلید رمز دسترسی پیدا کنه ، اون وقت پسورد شما هم به سرقت میره و کلی مشکلاتِ دیگه به وجود میاد . چاره ی این مشکل هم hash می باشد . چطوری ؟ اینجوری که اون سرور به جای اینکه خودِ پسورد شمارو توی دیتابیسش ذخیره کنه ، هش مربوط به دیتای شما رو ذخیره میکنه و زمانی هم که شما فرضا توی یک صفحه ی لاگین  ( login) پسوردتون رو وارد میکنید ، همون سمتِ کلاینت پسوردِ شما هش میشه و این رشته ی هش شده که جناب هکر هیچ کاری با اون نمیتونه انجام بده و چیزی ازش نمیفهمه، انتقال داده میشه به سمت سرور تا بررسی بشه که اگر هش مربوطه ، با هشِ پسورد اون یوزر برار بود اجازه ی لاگین داده بشه . و اینطوری توی انتقال داده هامون هم از پسورد هش شده استفاده کردیم که عملا قابل بازگردانی نیست. توابع معروفِ هش :SHA256 ,  SHA512 , MD5 اما encoding , decoding  چیست ؟از لحاظی تئوری انکدینگ مثل رمزگذاری عمل میکنه ، یعنی اینکه الگوریتم هاش دو طرفه هستند . اما هدفش برقراری امنیت در ارتباطات نیست . انکدینگ صرفا به فرآیند تبدیلِ داده به یک استاندارد متفاوت هست  برای مثال  حتی تبدیل مبنا هم نوعی انکدینگ به حساب میاد یا حتی کد های  اَسکی (ASCII) هم که کارکتر های مختلف رو به عددی در مبنای دو تبدیل می کنه هم نوعی encoding هست  . همونطور که گفته شد هدف از انکد کردن دیتا ، مخفی سازی اون دیتا نیست ؛ چون اصلا برای اینکار ما ازش استفاده نمیکنیم و الگوریتم هاش به راحتی قابل دیکود (decode ) کردنه و بیشتر جهت این استفاده میشه که داده هامون رو متناسب با شرایط کنیم . مثلا  متد انکودینگِ   base64 میاد و استاندارد یا محتویات فایل رو یع تغییر کوچیک میده تا این دیتا هنگام عبور از شبکه توسط مودم ها و روتر ها به عنوان یک دستور شناخته نشن و مشکلی به وجود نیار متد های انکدینگ معروف  :UTF8 , base64 , ASCIIجمع بندی تفاوت  hashing , encryption  :1) هدف از رمز گذاری ، مخفی کردنِ فایل و برقراری امنیت  می باشد اما هش کردن با هدف چک کردن درستی و اصل بودنِ دیتا ها استفاده میشه 2) توابع و الگوریتم های رمزنگاری دوطرفه هستند و با داشتن کلیدِ رمز و دیتای رمزگذاری شده میتوان به دیتای اصلی ( plain text ) رسید . اما توابع هش یک طرفه هستند و با دانستن تابعِ هش و دیتای هش شده نمیتوان به دیتای اصلی رسید . 3) در رمزگذاری ، دیتای رمزگذاری شده اندازه اش متناسب با دیتای ورودی می باشد ، یعنی فرضا هرچقدر دیتایی که میخواهیم رمزگذاری اش کنیم بیشتر باشد ، اندازه و حجم دیتای رمزگذاری شده هم بیشتر میشود . اما در هش  متناسب با تابع استفاده شده برای هش ، این مقدار خروجی ثابت می باشد . فرضا اگر تابع هش قرار باشد خروجی ای 32 بیتی تولید کند ، فرقی ندارد که یک فایل ویدئویی 2 گیگابایتی را هش کنید یا یک متنه یک خطه ، در هر دو حالت رشته ای که به عنوان هش تولید میشود 32 بیت دارد . مباحثی که توضیح داده شدند مقدمه ای بر مقدمه ی بودند و دنیای امنیت اطلاعات خیلی خیلی بزرگ تر از این هاست . ولی امیدوارم که این توضیح مقدماتی به زبان ساده براتون لذت بخش بوده باشه و در حد همین هم به جواب سوالایی که باعث شده سرچ کنید در مورد این مباحث رسیده باشید.اگه فکر میکنید جایی رو بهتره که جور دیگه ای توضیح بدم و میتونید راحت تر و ساده تر بیان کنید  یا اینکه اشکال نگارشی ، علمی این بود خوشحال میشم توی کامنت ها گفته بشه .بدرود . </description>
                <category>&quot;Mahdi&quot;</category>
                <author>&quot;Mahdi&quot;</author>
                <pubDate>Fri, 06 Aug 2021 21:25:45 +0430</pubDate>
            </item>
                    <item>
                <title>تفاوت Encryption , hashing , encoding</title>
                <link>https://virgool.io/@MahdiZarepoor/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-encryption-hashing-encoding-sm29zy3haz5b</link>
                <description>part 1 : a brief introduction about encryptionبه عنوان یک تازه کار ، از همون اوایل خیلی جاها واژه های  encryption , decryption , hashing function ,encoding , decoding رو میشنیدم و یکم در موردش پرس و جو میکردم ، اما هیچوقت یه دید کلی و مقایسه ی کامل ازشون نداشتم  . اما بلخره تصمیم گرفتم یک بار برای همیشه تفاوت بین این ها رو به صورت کامل یادبگیرم  و خودم این مقایسه رو انجام بدم. این پست یک مقدمه ای کوتاه و ابتدایی در مورد فرق رمزگذاری ، هش ، انکدینگ میباشدخوب بیاید نوبتی سوالارو مطرح کنیم و بهشون جواب بدیم : اول اینکه encryption با چه هدفی ایجاد شده ؟فرض کنید شما توی نقطه ی A  ایستادین و دوست صمیمی شما هم توی نقطه ی B  هست . شما قصد دارین یه پیام یا یسری اطلاعات رو از طریقِ کبوتر نامه رسون به اون فرد منتقل کنید . خوب تا اینجای کار که هیچ مشکلی نیست . اما فرض کنید که یه روز شما بخواید یک پیامی رو برای دوستتون بفرستین که خیلی مهم باشه و دوست ندارین کسی غیر از خودِ دوستتون از پیامِ شما با خبر بشه . این حقِ شماست و کسی هم روی کاغذ این اجازه رو نداره که به زور از حرفای دو نفر خبردار بشه .  اما اینکه پیامتون رو خیلی خشک و خالی وصل کنید به پای کبوتر و بفرستینش هوا خیلی تضمینی نمی ده که پیام شما به سرقت نره ، چون ممکنه یه فرد توی مکانی به اسم C که بین شما و دوستتون هست ،  این کبوتر رو شکار کنه یا به دام بندازتش . در این صورت اطلاعات شما لو رفته و دیگه حریم خصوصی ای عملا وجود نداره  . اینجاست که پای رمزگزاری میاد وسط . به این دو متن توجه کنید سلام . ساعت 3 ظهر فردا بیا پای درخت شاتوت . ضقش3ص2345rfgasdfش2**2^$%#4 خوب . این واضحه که  انسان ها برای ارتباط برقرار کردن با هم از یه سیستم منظم و معنی دار استفاده میکنن که بهش میگیم &lt;&lt;زبان&gt;&gt; . یعنی اگر یسری علامت ها ( حروف ) رو به یه حالات خاص به کار ببریم و کنار هم بچینیم &lt;&lt;کلمات&gt;&gt; به وجود میان که برای ما یک معنای خاص میده و هرچی غیر از اون دیگه هیییچ معنایی پیدا نمیکنه . هدف از رمزگذاری هم اینه که پیامی که مدنظر ماست فقط برای ما و اونی که میخوایم معنی داشته باشه و هر کس دیگه ای وقتی خواست پیام مارو گوش کنه یسری چیزای بی معنی نصیبش بشه . یه مثال : فرض کنید من و اونی که میخوام باهاش صحبت کنم با هم قرار داد ببندیم که از این به بعد برای اینکه کسی پیام های مارو نفهمه بیایم و اینکار رو انجام بدیم : هر حرفی که توی پیاممون خواستیم استفاده کنیم رو به جاش سه حرف بعدی توی اون الفبا رو قرار بدیم مثلا توی فارسی به جای حرف  &lt;&lt;ب&gt;&gt; از حرف &lt;&lt;ث&gt;&gt; استفاده کنیم. اینجوری پیام ما برای هر کسی به جز خودمون یک چیز بی معنا و مفهوم میشه . پیام ما ------------------------------&gt; سلام چیزی که بقیه می بینند -------&gt; ضوتپبیاید یکم با اصطلاحاتی که قرار بعدا ازشون استفاده کنیم در قالب این مثال آشنا بشیم . در این مثال به متنی که بدون رمز گذاری داریم استفاده می کنیم می گن  plain text ( همون &lt;&lt;سلام&gt;&gt; توی مثلال ) ، به متن بی  معنی که کسی چیزی ازش نمی فهمه میگن  cipher text ، اون فرآیندی که برای بی معنی کردنِ  پیاممون داریم استفاده می کنیم و plain text رو تبدیل به cipher text  میکنیم رو بهش میگن  رمزگذاری ( encryptoin ) ، و به الگوریتمی که برای اون استفاده میکنیم ( توی مثال جابجایی سه تا به جلو بود )  کلیدِ رمز گفته میشه . مثال بالا  یه مثال خیلی خیلی ساده بود و توی واقعیت استفاده کردن از همچین رمز هایی عملا بی فایدست و خیلی خیلی راحت و سریع میشه رمزش رو شکست و به متن اولیه رسید . اما الگوریتم های رمزگذاری خیلی خیلی خیلی میتونند پیشرفته تر باشند طوری که تحت هیچ عنوان نشه با داشتن  cipher text  به plain text  رسید . نکته ای که اینجا باید بگم و خیلی خیلی توی درک تفاوت hash با encryption اساسی هست و بعدا بهش میرسیم اینه که :تماااام الگوریتم های رمزگذاری باید و باید یه شرط رو داشته باشند و اون شرط اینه که همممگی اون ها باید دو طرفه (two way function ) باشند . یعنی اینکه با داشتن الگوریتم( کلیدِ) رمز علاوه بر اینکه بشه یک متن ساده رو به یک متن رمزگذاری شده تبدیل کرد ، برعکسش هم شدنی باشه . یعنی با داشتن اون کلیدِ رمز ، بشه از عبارت رمزگذاری شده به عبارت اصلی رسید .حالا بیاید و یکم در مورد رمزنگاری و استفاده ی اون توی زندگی مدرن تکنولوژی صحبت کنیم و بفهمیم الان که دیگه خبری از کبوترِ نامه رسان نیست و بجاش بستری به اسم اینترنت هست این رمزگذاری چجوری استفاده میشه . توانایی فرستادن دیتا ( اطلاعات ) و دریافت اون در قالب شبکه های کامپیوتری یک پیشرفت بزرگ محسوب میشه . اما مثل قبل ، یکی از چالش های اساسی اون حفظ حریم خصوصی افراد  می باشد . در اینجا هم ما با کاربرد رمزگذاری اطلاعات مواجه هستیم . فرض کنید که شما یک فایل متنی حاوی یک پیام رو میخواید از طریق یک برنامه ی پیام رسان از یک سیستم به یک سیستم دیگه ارسال کنید . پیام شما بعد از خارج شدن از سیستم شما وارد فضایی میشه به اسم اینترنت و دیگه شما هیچ کنترلی روی اون ندارید و بقیه اش کار کابل ها و امواج و روتر هاست . حالا اگه یک نفر بتونه دیتای شما رو شنود (sniff ) کنه انوقت خیلی راحت به محتوای دیتای شما دسترسی پیدا میکنه که میتونه خیلی خطرناک تر از سرقت اطلاعات سنتی باشه ، چرا که دیتای شما ممکنه حاوی پسورد ها یا خیلی اطلاعات حیاتی دیگه باشه .رمزگذاریِ متقارن ( symmetric encryption ) : رمزگذاریِ متقارن رمز گذاریِ متقارن یک روش برای انتقال اطلاعات بین سیستم ها وسرویس های مختلفه . طبق این تصویر توی رمز گذاری متقارن دیتایِ اولیه ( plain text ) توسط یک الگوریتم ، رمزگذاری میشه . بعد از اون ، دیتای رمزگذاری شده (  cipher text ) از طریق کابل یا هرچی  منتقل میشه به مقصد . توی مسیر هرکس دیتای مارو گیر بندازه چیزی که نصیبش میشه یسری دیتای بی معنی هست . این روش بسیار مناسب می باشد اما مسئله ای که مطرحه اینه که خودِ کلیدِ رمز چجوری ازA  به  Bبرسه ؟؟ اگر قرار باشه که خود کلید رو هم همراه با cipher test  به سمت مقصد بفرستیم ، فرد سارق با داشتن کلیدِ رمز و خود دیتا ، میتونه خیلی راحت اون دیتای رمزگذاری شده رو دیکریپت  ( decrypt ) کنه و به دیتای اولیه و معنا دار برسه .  اینجاست که دومین روش برای رمز گذاری میاد وسط .رمزگذاریِ نامتقارن ( asymmetric )  :رمزگذاریِ نامتقارناین روش بسیار زیباست . در این روش هر یک از افراد ، دارای دو کلید می باشد . کلید عمومی و کلید خصوصی کلید عمومی چیزی هست که ما اون رو به همه میتونیم نشون بدیم و دست هرکس بیفته مشکلی به وجود نمیاره  . اما کلید خصوصی کلیدی هست که فقط باید دست خودِ ما باشه و کسی از اون نباید با خبر باشه .نحوه ی کار اینجوری که بین کلید های خصوصی و عمومیِ هر فرد ، یک رابطه ی ریاضی هست . جوری که دیتای هایی که با کلید عمومی رمزگذاری شده باشند ، با کلیدِ خصوصیِ همون فرد قابل دیکریپت شدن هستند . شما شبکه ای رو در نظر بگیرید که متشکل از 100  سیستم مختلف می باشد ، هر سیستم برای خود یک رمز عمومی دارد که میتواند آن را در اختیار سایر افراد قرار دهد یا حتی در یک سِروِر ، کلید عمومی خود را قابل جستجو و دستیابی برای سایر افراد قرار دهید . اما هر سیستم رمز خصوصی خود را به صورت شخصی فقط و فقط در سیستم خود نگه میدارد . حالا یه سیستم به اسم A قصد داره یه دیتا رو به B بفرسته .  طبق عکس بالا که به زیبایی توضیح داده سیستمِ A به یه نحوی کلید عمومیِ سیستم B رو پیدا میکنه ( با درخواست ازش یا سرچ کردن توی یه دیتابیس که کلید های عمومی نگهداری میشود ) سیستم A با داشتن کلید عمومیِ سیستم B  اون دیتایی که میخواد بفرسته رو رمزگذاری می کنه و اون رو میفرسته به سمت B  . توی مسیر هرکس به دیتا دسترسی پیدا کنه فقط یه سری دیتای رمز گذاری شده نصیبش شده و خبری از کلید رمز هم نیست . بعد از اینکه دیتای مذکور به سیستم B میرسه ، سیستم B  با کلید خصوصیِ خودش ، اون دیتای رمز گذاری شده رو رمزگشایی ( همون decrypt ) میکنه و به این صورت فرایند به صورت کامل انجام میشه .معروف ترین الگوریتم های رمزنگاری :RSA , AES , caesar cipher پایانِ قسمتِ اول  ( مقدمه ای بر رمزنگاری ) برای مطالعه ی قسمت دوم این پست بر روی این لینک کلیک کنید </description>
                <category>&quot;Mahdi&quot;</category>
                <author>&quot;Mahdi&quot;</author>
                <pubDate>Fri, 06 Aug 2021 21:23:04 +0430</pubDate>
            </item>
                    <item>
                <title>نصب کالی لینوکس روی virtualbox با فایل ova.</title>
                <link>https://virgool.io/@MahdiZarepoor/%D9%86%D8%B5%D8%A8-%DA%A9%D8%A7%D9%84%DB%8C-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D8%B1%D9%88%DB%8C-virtualbox-%D8%A8%D8%A7-%D9%81%D8%A7%DB%8C%D9%84-ova-knn3r1mwrxom</link>
                <description>سلام . توی این آموزش قصدم توضیح  0 تا 100 آموزش لینوکس و توزیع کالی روی مجازی ساز virtualbox  نیست و آموزش برای کسانی هست که قبلا کالی یا هر توزیع دیگه رو نصب کردن اما الان توی نصب به مشکل خوردن .  دلیل گذاشتن این آموزش این بود که برای یکی از دوستان قصد نصب کالی رو داشتم و با یکمی مشکل مواجه شدم و تغییراتی که توی روند نصب به وجود اومده .   ولی خوب خوشبختانه تونستم با  چند تا سرچ حلش کنم اما یکم زمانم رو گرفت . این پست تقدیم به زمان شما !!!  :)خوب . توی روش مرسوم ما می اومدیم از سایت  kali.org  توی قسمت bare metal  جدید ترین release  کالی لینوکس رو دانلود می کردیم . فایلی که دانلود میشد یه فایلِ iso.  بود . توی مرحله ی بعد وارد virtualbox  میشدیم و یه ماشین مجازی میساختیم و به اون ماشین مجازی سخت افزار مجازی ای که میخواستیم رو میدادیم و ماشین مجازیمون به راحتی ساخته میشد . توی مرحله بعد وارد نصب سیستم عامل ، روی اون ماشین مجازی میشدیم و تمام .اما جدیدا  سایت  kali.org توی صفحه ی دانلودش در کنارِ  فایلِ  iso   فایل  ova هم قرار داده . کرده که نصبش با حالت قبل یکم تفاوت داره و نمیشه نصب رو مثل قبل انجام داد . وقتی بخواید مثل قبل نصب کنید و مراحل بالا رو طی کنید ، بعد از ساختن ماشین مجازی ، زمانی که بخواید فایلی که دانلود کردین رو  add کنید با این مشکل مواجه میشید که اون فایل ova  قابل add  شدن نیست و پیدا نمیشه و دلیلش هم اینه که توی این روش شما باید حتما از فایل iso  استفاده کنین . اما راه حل چیه ؟  از اونجایی که نصب کالی لینوکس روی ماشین مجازی خیلی محبوبه ، یه راه ساده تر برای استفاده از اون  وجود داره . توی این راهِ ساده شما موقع دانلود به جای دانلود فایل iso.  ، فایلِ  ova.  که مخفف  open virtualization format archive  هست رو دانلود میکنید . این فایل pre-configured هست  یعنی اینکه از قبل آمادس و نیازی به ساختن ماشین مجازی نداره  . بریم سراغ آموزش تصویری 1وقتی روی این لینک : https://www.kali.org/get-kali/ که ریپازیتوری رسمی دانلود کالی هست کلیک کنین وارد صفحه ای مثل عکس بالا میشین که ازتون میخواد که پلتفرمی رو که میخواید دانلود کنید رو انتخاب کنین که شامل mobile , cloud , wsl   , virtualbox  , ....  میشه که خوب باید روی virtualbox  کلیک کنید . 2توی مرحله ی دو ازتون میپرسه که میخواین روی چه مجازی سازی نصب کنید و اینکه نسخه ی 64 یا 32 بیتی که متناسب با سیستمتون انتخاب کنین و روی گزینه ی دانلود کلیک . خوب . تا الان شما فایل  ova.  رو دانلود کردین . و این فایل به این صورت هستبه این صورت 3توی مرحله ی 3 ویرچوال باکستون رو ران کنید و مطابق شکل روی  :file&gt;import appliance &gt; کلیک کنید تا شکل 4 براتون نمایش داده بشه 4توی اینجا توی قسمت فایل باید آدرس اون فایلی که دانلود کردیم رو وارد کنید و گزینه ی expert رو کلیک کنید. source  رو هم روی همون  local file system  قرار بدید .  56وقتی که صفحه ی 6 براتون اومد   :machine base folder : آدرس دایرکتوری ( پوشه ) ای که میخواید نصب بشه و بقیه گزینه ها رو هم مثل عکس تنظیم کنید  و بعد :agree  ----&gt; import کلیک کنید . ممکنه چند دقیقه ای طول بکشه تا کامل نصب بشه . 7خووووب حالا کالی لینوکس شما تقریبا کامل نصب شده و کافیه اون رو اجرا کنید  و دیگه نیازی به نصب دستی ,  پارتیشن بندی و بقیه ی بند و بساط ها نیست  و خودش به صورت پیش فرض همه رو انجام داده. دقت داشته باشید که پسورد و یوزرنیم پیشفرض :user : kali pass : kali رو وارد کنید  . حتی نیازی به انجام دادن تنظیمات برای فول اسکرین کردن صفحه هم نیست و اون هم پیش فرض انجام شده  و با    Ctrl + F   میتونین صفحه رو فول اسکرین کنید .و تمااااام . enjoy your kali اگه  به مشکلی حین نصب برخوردین توی کامنت همین پست سوال کنید . </description>
                <category>&quot;Mahdi&quot;</category>
                <author>&quot;Mahdi&quot;</author>
                <pubDate>Tue, 15 Jun 2021 18:53:36 +0430</pubDate>
            </item>
                    <item>
                <title>موسیقی به سبک اسکاتمن , به دور از معنا !!</title>
                <link>https://virgool.io/@MahdiZarepoor/%D9%85%D9%88%D8%B3%DB%8C%D9%82%DB%8C-%D8%A8%D9%87-%D8%B3%D8%A8%DA%A9-%D8%A7%D8%B3%DA%A9%D8%A7%D8%AA%D9%85%D9%86-%D8%A8%D9%87-%D8%AF%D9%88%D8%B1-%D8%A7%D8%B2-%D9%85%D8%B9%D9%86%D8%A7-diwzm4iwop11</link>
                <description>Ski-Ba-Bop-Ba-Dop-Bop
John Paul Larkin (scatman john )  1942 , 1999  جان پاول آرکین معروف  به  اسکاتمن جان  نوازنده و خواننده ی آمریکایی   و  داستانی جالب . پاول  که  از  کودکی از مشکل لکنت زبان رنج میبرد و همین موضوع باعث گوشه گیری و کمبود اعتماد به نفس او در دوران کودکی و نوجوانی شده بود . او در خوانواده ای هنرمند و نوازنده زندگی می کرد و همین موضوع باعث  گرویدن او به سمت پیانو در سن 12  سالگی شد . پیانو وسیله ای برای او شد تا لکنت زبانش زیاد بزرگ جلوه نکند . آخر وقتی می شود با دستان خود سخن گفت چه نیازی به زبان است . همچنین ورود او به دنیای زیبای هنر موسیقی به او اعتماد بنفس و هدفی داد تا بیشتر بر روی زبان خود کار کند . او همچنین  در سن 14 سالگی  با سبک موسیقی اسکات آشنا شد . اما سبک اسکات چیست  ؟؟؟ سبک اسکات نوعی آواز در جاز است که فرد  کلماتی بی معنا و مفهموم را بکار میبرد طوری که حتی شاید یک کلمه اش هم معنا نداشته باشد !!! برای مثال :  &quot; کی با دوپ با دوپ بوپ  &quot; یا &quot;doo, be, shoo, bop, ooh, dee, doo, sha-bam&quot;  . صدا هایی  که بیرون می آیند اما معنی ای با خود حمل نمی کنند . او پیانو را ادامه داد و  همان پیانو او را به شهرت رساند ، اما این پایان این هنرمند نبود . در سال 1990 برای گسترش هنر خود به برلین نقل مکان کرد .در آنجا جاز را درک کرد و شروع به نواختن جاز کرد . حس تشویق شدن توسط جمعیت زیادی که برای شنیدن جاز آمده اند او را در فکر فرو برد .   جرقه ای برای تصمیمی شجاعانه به ذهن او خطور کرد . تصمیم به خواندن آواز برای انسانی با لکنت شدید زبان !!!!  او تصمیم به ترکیب  سبک اسکات با رقص و هیپ هاپ کرد . تصمیم شجاعانه ای بود  . او  با این وجود هنوز ترس از مسخره شدن داشت ، هنوز میترسید که شنوندگان متوجه لکنت زبان او شوند  . اما همسرش پیشنهادی به او داد : به جای ترس از اینکه دیگران متوجه لکنت زبان تو شوند   می توانی برای لکنت زبانت آهنگ بخوانی و در موسیقی ات از آن سخن بگویی   و آن  را چاشنی آهنگت کنی  .  تصمیم عملی  شد و آهنگی با نام  &quot;Scatman (Ski-Ba-Bop-Ba-Dop-Bop)&quot; متولد .  لقب scatman  شکل گرفت .  بیش از شش میلیون نسخه از آهنگ فروخته شد !!‌رکوردی عجیب برای او . نتیجه ی آن این شد که پاول در سن 53 سالگی تبدیل به یک ستاره ی جهانی شد  و آهنگ او نه تنها در آلمان بلکه در بسیاری کشور های دیگر فروش فوق العاده ای داشت .  پس از آن پاول که ملقب به اسکاتمن شده بود 4 آلبوم  تولید کرد . که  شهرت او  را جهانی کرد .  او حتی به حدی بیانش را تقویت کرده بود که اجرا های زنده هم برگزار میکرد . به گفته ی او  : در یک اجرا در اسپانیا مردم 5 دقیقه تمام جیغ می کشیدند و من از شدت صدای مردم نمیتوانستم شروع به خواندن کنم .در 1998 سرطان ریه به سراغ آن آمد  . دکتر ها او را از حجم کاری زیاد منع کردند اما او نمیتوانست متوقف شود  زندگی برای او تازه شروع شده بود . همچنان ادامه داد حتی در ژوئن 1999 چهارمین آلبوم خود را تکمیل کرد  . اما سرانجام در سوم دسامبر 1999 در زادگاه خود یعنی لس آنجلس آمریکا در گذشت . روحش شاد ✍? مهدی !</description>
                <category>&quot;Mahdi&quot;</category>
                <author>&quot;Mahdi&quot;</author>
                <pubDate>Tue, 25 May 2021 20:41:18 +0430</pubDate>
            </item>
            </channel>
</rss>