چند وقت پیش با خودم فکر کردم یه برنامه رمزگذاری متن بنویسم. سر کلاس فارسی بودم و حسابی حوصلم سر رفته بود، بنابرین دست به کد شدم و نوشتمش.
امروز با یه مدل دیگه دوباره انجامش دادم و هر دو نسخه رو توی گیتهاب گذاشتم.
اگر بتونید کد های منو بخونید یک اعجوبه هستید. خیلی وحشتناک میشه بعضی اوقات!!
نسخه اولی که نوشتم دو ورودی داشت: 1- متنی که میخوایم رمزگذاری کنیم 2- پسورد!
خب این کد دو لیست اصلی داشت که در ابتدای کار دقیقا عین هم هستن. متشکل از حروف انگلیسی، اعداد و یک فاصله. لیست اصلی و لیست فرعی. قراره به لیست اصلی هیچ دستی نخوره. کد شروع به کار میکنه، پسورد رو برمیداریم و ایندکس هر کاراکتر را از لیست اصلی میگیریم و جمع میکنیم. عددی در میاد مثلا 29.
حالا کارمون شروع میشه، 29 بار لیست فرعی رو میچرخونیم ، چطوری؟؟ اینطوری: 29 بار این حلقه رو اجرا میکنیم: اولین عضو لیست رو بردار و شوتش کن ته لیست . مثلا در اولین تکرار حلقه a به ته لیست میرود و b اولین عضو لیست ماست.
حالا مرحله رمزگذاری شروع میشه. در این مرحله ما یک متن داریم، یک لیست اصلی، و یک لیست قاتی پاتی و درهم برهم. اینجا یک کار ساده میکنیم.
یک استرینگ خالی میسازیم، و این حلقه را روی متنمان پیاده میکنیم. ایندکس هر کاراکتر متن رو میگیریم و کاراکتری با همان ایندکس رو از لیست فرعی(درهم) پس میگیریم و به استرینگ خالی(سابق) اضافه میکنیم. تبریک میگم متنمون رمزگذاری شد.......
خودم با این نسخه بیشتر حال کردم. چون هم پیچیدگی بیشتری داشت و هم پسورد نمیخواست از ما. (:
اولین اتفاقی که میوفته، گرفتن متن شماست. این کد هم دقیقا همان دو لیست زیبای قبلی رو داره (اصلی و فرعی). حالا برنامه یک عدد دو رقمی رندوم میسازه . مثلا 42.
همون اتفاقی که توی نسخه قبل افتاد اینجا هم میوفته، 42 بار لیست فرعی چرخیده میشه و طبق همون دستور قبلی یک متن رمزگذاری شده تحویل میگیریم. کاری که اینجا میکنیم اینه که یه سری کاراکتر عجق وجق میریزیم بین این متنمون .
مثلا اگه متن رمزگذاری شده این (xl06 q) بود تبدیل به این (x#l!0?6* #q) میشه که یکم کار رو سخت تر میکنه.
تنها کاری که مونده اینه که کل این متن رو چپه کنیم یعنی تبدیلش میکنیم به این: q# *6?0!l#x
سوالی که میمونه اینه که حالا این چجوری میخواد رمزگشایی بشه؟؟؟؟ اینجوری??: اون عدد دو رقمی که اول درست شد رو یادتونه؟؟؟؟ که ما گفتیم 49 باشه. حالا رقم اول رو میزاریم اول متن و رقم دوم رو میزاریم اخر متن. یعنی اینجوری: 4q# *6?0!l#x9
اینکه چجوری رمزگشایی میشن رو میتونید توی کد ها ببینید. تقریبا همونه ولی برعکس??
ولی ان شاءالله روش رمزگشایی رو توی یه پست دیگه مینویسم??