سورس کد الگوریتم DES با زبان سی شارپ به همراه پیاده سازی تمام مراحل
در این پست سورس کد الگوریتم DES با زبان سی شارپ را بدون استفاده از توابع آماده سی شارپ برای شما کاربران گرامی آماده کرده ایم و تمام مراحل الگوریتم DES در این پروژه از اول کد نویسی و پیاده سازی شده است. در صورت نیاز به پروژه الگوریتم DES در زبان سی پلاس پلاس نیز آن را آماده داریم و دقیقا کد های استفاده شده در سورس کد الگوریتم DES با زبان سی شارپ نیز در آن پیاده سازی شده است.
الگوریتم DES به عنوان یک الگوریتم استاندارد کدگذاری است و طرز کار الگوریتم DES به این شکل است که یک متن با طول ثابت را به عنوان ورودی میگیرد و پس از انجام عملیات مختلف بر روی رشته وارد شده یک خروجی که طولش برابر با طول متن وارد شده است را بر میگرداند. الگوریتم DES از یک کلید برای ایجاد رمز استفاده میکند و تنها کاربرانی می توانند عمل رمزگشایی را انجام دهند متن کلید را داشته باشند.
بعد از شگستن الگوریتم DES دیگر این الگوریتم استفاده نشد و به جای آن الگوریتم AES به عنوان استاندارد جایگزین آن مورد تائید قرار گرفت. الگوریتم AES مانند الگوریتم DES یک الگوریتم رمزقطعهای است و برعکس الگوریتم DES از ساختار فیستل استفاده نمیکند. حمله side channel حمله شناخته شده بر الگوریتم AES بودهاست.
جهت مشاهده توضیحات کامل در مورد سورس کد الگوریتم DES با زبان سی شارپ به همراه پیاده سازی تمام مراحل آن به ادامه مطلب مراجعه کنید.
مراحل پیاده سازی الگوریتم DES:
در الگوریتم DES طول قطعات به ۶۴ بیت تقسیم شده است و کلید این الگوریتم نیز شامل ۶۴ بیت خواهد بود و تنها از ۵۶ بیت آن استفاده میشود و ۸ بیت باقیمانده برای چک کردن parity مورد استفاده قرار می گیرد. الگوریتم DES شامل ۱۶ مرحله مشابه است و هر مرحله یک دور نامیده میشود. در واقع متن اولیه ما که می خواهیم آن را رمز کنیم ابتدا به تابع مربوط به جایگشت اولیه (IP) ارسال می شود. بعد از اجرای عملیات پیچیده وابسته به کلید در مرحله بعد یک جایگشت نهایی (FP) بر روی آن اعمال خواهد شد. IP و FP معکوس همدیگر هستند و در واقع تابع FP عملی که توسط تابع IP انجام شده است را خنثی خواهد کرد. بهم همین خاطر از نظر رمزنگاری اهمیت زیادی ندارند و برای آسان کردن عمل بارگذاری در قطعات داده در سختافزارهای دهه ۱۹۷۰ استفاده می شود. در این الگوریتم قبل عملیات اصلی، اطلاعات به دو قسمت ۳۲ بیتی تقسیم میشود که این دو بخش به طور پی در پی مورد پردازش قرار میگیرند این عمل به عنوان شکل فیستل شناخته شده است. ساختار فیستل تضمین کننده این است که عمل رمزگذاری و عمل رمزگشایی هر دو رویه کاملاً شبیه هم هستند فرق آنها در این است که زیر کلیدها در زمان رمزگشایی در جهت معکوس رمزگذاری استفاده می شود به همین خاطر دیگر نیازی به الگوریتمهای دیگری برای رمزگذاری و رمزگشایی نیست. تابعی که خروجی IP را گرفته و پس از طی کردن 16 مرحله ورودی FP را تولید میکند تابع F نامیده میشود. این تابع دو ورودی دارد که یکی ۳۲ بیتی و دیگری ۴۸ بیتی است و یک خروجی ۳۲ بیتی تولید میکند. در اینجا دو بلاک وجود دارد که 32 بیت سمت چپ با L و 32 بیت سمت راست با R مشخص شده است.
در شکل زیر نمای کلی الگوریتم DES رو مشاهده می کنید.
(نمای کلی الگوریتم DES)
در فرمول زیر اگر K یک بلاک ۴۸ بیتی باشد که از کلید اصلی که ۶۴ بیتی است مشتق شده باشد آنگاه خروجی یک دور با ورودی LR و خروجی L1R1 به صورت زیر تعریف میشود.
L1=R R1=L XOR F(R,K)
در فرمول زیر اگر KS نام تابعی باشد که کلید ۶۴ بیتی آن KEY در نظر گرفته شود و یک عدد صحیح ما بین ۱ تا ۱۶ را به عنوان پارامتر ورودی بگیرد و کلید ۴۸ بیتی Kn را به عنوان عدد خروجی تولید کند آنگاه بیتهای Kn از تغییر محل بیتهای KEY حاصل می شود.
Kn= KS (n.KEY)
همچنین KS را تابع key schedule مینامند.
Ln=Rn-1 Rn=Ln-1 XOR f(Rn-1,Kn)
برای رمزگشایی نیز از فرمول زیر استفاده می شود:
R=L1 L=R1 XOR f(L1,K)
عمل رمزگشایی با همان الگوریتمی که برای عمل رمزگذاری استفاده شد انجام گرفته می شود و در هر مرحله همان K بیتی که به عنوان کلید برای رمزگذاری استفاده شده بود مورد استفاده قرار میگیرد.
Rn-1=Ln Ln-1=Rn XOR f(Ln,Kn)
جهت انجام محاسبات رمزگشایی R16L16 ورودی IP و R0L0 ورودی تابع FP است. کلید 16 در مرحله اول، کلید 15در مرحله دوم و به همین ترتیب کلید اول در مرحله 16 مورد استفاده قرار میگیرد.
تابع F:
بسط: با استفاده از این مرحله یک جایگشت انبساطی ۳۲ بیتی به ۴۸ بیتی گسترش داده خواهد شد.
ترکیب کلید: با استفاده از این مرحله حاصل مرحله قبل با یک زیر کلید XOR خواهد شد. 6 کلید ۴۸ بیتی با استفاده از الگوریتم key schedule از کلید اصلی تولید خواهد شد.
جایگزینی: پس از ترکیب کلید هر قطعه داده به هشت قسمت ۶ بیتی هر کدام از s-box ها ورودی ۶ بیتی خود را به یک خروجی ۴ بیتی تبدیل میکند S-boxها قلب الگوریتم DES هستند و بدون آنها رمز خطی خواهد بود و در نتیجه قابل شکستن خواهد شد.
جایگشت: در آخر ۳۲ بیت خروجی S-box ها بوسیله یک جایگشت ثابت مجدداً سازماندهی میشود که با نام P-box شناخته شده است.
در شکل زیر تابع F رو مشاهده می کنید.
(شکل تابع F)
الگوریتم Key Schedule:
این الگوریتم برای تولید زیر کلیدها استفاده خواهد شد. در گام اول ۵۶ بیت از ۶۴ بیت اطلاعات کلید توسط تابع جایگشت1 (PC1) انتخاب میشوند و ۸ بیت باقیمانده یا دور ریخته میشوند و یا به عنوان parity مورد استفاده قرار میگیرند در مرحله بعد این ۵۶ بیت به دو نیمه ۲۸ قسمتی تقسیم میشوند و پس از آن با هر نیمه به طور جداگانه رفتار خواهد شد. در دور بعدی هر دو نیمه یک یا دو بیت به سمت چپ انتقال مییابند و ۴۸ بیت زیر کلید توسط جایگشت2 (PC2) انتخاب خواهد شد. ۲۴ بیت، نیمه راست و ۲۴ بیت دیگر در نیمه چپ ایجاد می شود. با استفاده از انتقال در هر زیر کلید مجموعه متفاوتی از بیتها مورد استفاده قرار میگیرد. هر بیت تقریباً در ۱۴ تا ۱۶ زیر کلید مورد استفاده قرار می گیرد. الگوریتم key schedule در عمل رمزگشایی مثل رمزگذاری است ولی زیر کلیدها در مقایسه با رمزگذاری در جهت عکس هستند به غیر از این تغییر بقیه الگوریتم مانند رمزگذاری انجام میشود.
در شکل زیر تولید کلید مراحل مختلف رو مشاهده می کنید.
(تولید کلید مراحل مختلف)
در ادامه فیلمی از نحوه کار کردن سورس کد الگوریتم DES با زبان سی شارپ به همراه پیاده سازی تمام مراحل را قرار داده ایم که می توانید مشاهده کنید.
سلام یه پروژه با سی شارپ دارم می تونید انجام بدید. اگه قابل انجامه چه مدت زمان لازمه ؟
هزینه و زمان بستگی به کار داره که باید بررسی بشه. توضیحات پروژه مورد نظر رو به ایمیلی که در سایت اعلام کردیم ارسال کنید بررسی کنیم.