پیاده سازی الگوریتم RSA با C#

الگوریتم RSA

در این مقاله الگوریتم RSA را بررسی کرده و چگونگی پیاده سازی آن با C# را نشان می دهیم.برخی اوقات ما نیاز داریم که اطلاعات خود را ازدید سایر کاربران مخفی کنیم.برای این کار از الگوریتم های رمزنگاری استفاده می کنیم و اطلاعات را رمز می کنیم. الگوریتم های رمزنگاری بسیاری وجود دارد ما در اینجا الگوریتم Rivest, Shamir, Adleman (RSA) را بررسی خواهیم کرد.

درباره RSA:

RSA یک الگوریتم رمزنگاری می باشد که در سال ۱۹۷۷ توسط Ron Rivest، Adi Shamir، Leonard Adlemanمعرفی شد. این الگوریتم یکی از الگوریتم های رایج رمزنگاری کلید عمومی محسوب می شود.

رمزنگاری کلید عمومی (Public Key Encryption)

همچنین به عنوان رمزنگاری متقارن نیز شناخته می شود. دو کلید استفاده می شوند: کلید عمومی و کلید خصوصی.

کلید عمومی: برای رمز کردن

کلید خصوصی: برای باز کردن، به عنوان secret key نیز شناخته می شود.

الگوریتم RSA

در شکل بالا نحوه کار کلید عمومی نشان داده شده است.

در این تصویر، ۲ کاربر نشان داده شده اند:

ابتدا: فرستنده (کسی که پیامی را با کلید عمومی گیرنده ارسال می کند)

سپس: گیرنده (کسی که با استفاده از کلید خصوصی پیام فرستنده را دریافت می کند)

بنابراین در رمزنگاری کلید عمومی، فرستنده اطلاعات را با استفاده از کلید عمومی گیرنده رمز می کند و از الگوریتم رمزنگاری استفاده می کند که توسط گیرنده مشخص شده است و گیرنده فقط الگوریتم رمزنگاری و کلید عمومی را ارسال می کند.

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

به زبان ساده تر:

کلید عمومی: برای همه کسانی که می خواهند اطلاعاتی برای ما ارسال کنند، مشخص است.

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

الگوریتم RSA چگونه کار می کند:

هر دو کاربر (گیرنده و فرستنده) یک کلید عمومی و خصوصی تولید می کنند.

فلوچارت زیر، فرایند تولید کلید عمومی و خصوصی را نشان می دهد:

الگوریتم RSA

فلوچارت بالا نشان می دهد که کلید عمومی و خصوصی با استفاده از RSA چگونه تولید می شوند.

[divider style=”normal” top=”20″ bottom=”20″] [box type=”shadow” align=”” class=”” width=””]

پیشنهاد میکنم : سورس پروژه رمزنگاری توسط Cryptography

[/box] [divider style=”normal” top=”20″ bottom=”20″]

 

بعد از به دست آوردن کلید عمومی و خصوصی، مهم ترین چیز این است که حالا چگونه با استفاده از RSA اطلاعات را رمزنگاری و سپس رمزگشایی نماییم.

رمزنگاری و رمزگشایی در RSA

الگوریتم RSA

مثالی از  RSA: در ادامه مثالی از RSA به همراه تولید کلید عمومی و خصوصی و رمزنگاری و رمزگشایی را می بینیم.

تولید کلید عمومی و خصوصی:

الگوریتم RSA

رمزنگاری و رمزگشایی:

الگوریتم RSA

چگونه از RSA در برنامه های C# Windows Form استفاده کنیم:

  1. ویژوال استودیو را باز کرده و یک پروژه جدید از نوع “Windows Form Application” ایجاد می کنیم.
  2. حال Windows Form را به شکل زیر طراحی می کنیم.

الگوریتم RSA

برای این کار به ۳ TextBox برای متن اصلی، متن رمزنگاری شده و رمزگشایی شده و ۲ Button داریم.

حالا برای قسمت کد نویسی:

برای استفاده از الگوریتم RSA در C#، باید فضای نام زیر را به پروژه اضافه کنیم.

using System.Security.Cryptography;

حال یک تابع برای رمزنگاری می نویسیم.

static public byte[] Encryption(byte[] Data, RSAParameters RSAKey, bool DoOAEPPadding)
{
 try
 {
 byte[] encryptedData;
 using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
   {
    RSA.ImportParameters(RSAKey);            encryptedData = RSA.Encrypt(Data, DoOAEPPadding);    }   return encryptedData;
 }
 catch (CryptographicException e)
 {
 Console.WriteLine(e.Message);
 return null;
 }
} 

و یک تابع برای رمزگشایی تعریف می نماییم.

static public byte[] Decryption(byte[]Data, RSAParameters RSAKey, bool DoOAEPPadding)
{
 try
 {
 byte[] decryptedData;
 using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
    {
     RSA.ImportParameters(RSAKey);
     decryptedData = RSA.Decrypt(Data, DoOAEPPadding);
    }
 return decryptedData;
 }
 catch (CryptographicException e)
 {
 Console.WriteLine(e.ToString());
 return null;
 }        
}

چند متغیر به شکل زیر به کلاس اضافه می کنیم:

UnicodeEncoding ByteConverter = new UnicodeEncoding();
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
byte[] plaintext;
byte[] encryptedtext; 

حالا رویداد کلیک رمزنگاری را به صورت زیر مدیریت می کنیم:

private void button1_Click(object sender, EventArgs e)
{
plaintext = ByteConverter.GetBytes(txtplain.Text);
encryptedtext = Encryption(plaintext, RSA.ExportParameters(false), false);
txtencrypt.Text = ByteConverter.GetString(encryptedtext);
}

و سپس رویداد کلیک دکمه رمزگشایی را مدیریت می کنیم.

private void button2_Click(object sender, EventArgs e)
{
byte[] decryptedtex = Decryption(encryptedtext, RSA.ExportParameters(true), false);
txtdecrypt.Text = ByteConverter.GetString(decryptedtex);
} 

نتیجه:

متن اصلی:

الگوریتم RSA

متن رمز شده:

الگوریتم RSA

متن رمزگشایی شده:

الگوریتم RSA

مسعود شریفی پور

از سال 88 که با برنامه نویسی آشنا شدم خیلی علاقه مند بودم یک بستر آموزشی بسازم در فضای وب و به انتشار آموزش های در این زمینه بپردازم.حالا یک تیم داریم و با قدرت رو به جلو حرکت میکنیم.

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.