رمزنگاری و رمزگشایی در #C
دوشنبه 23 شهریور 1394در این مقاله قصد داریم درباره رمزنگاری (encryption) و رمزگشایی (ecryption ) اطلاعات وارد شده توسط کاربر بحث کنیم.
در این مقاله قصد داریم درباره رمز نگاری و رمز گشایی اطلاعات در سی شارپ صحبت کنیم گاهی اوقات لازم است در یک برنامه برای جلوگیری از خواندن اطلاعات مهم مثل اطلاعات ورود به برنامه ، بایستی این اطلاعات به صورت رمزنگاری شده در بانک اطلاعاتی ذخیره شوند ما قصد داریم در این پارت از آموزش اطلاعات را ازکاربر گرفته ودر صورتی که کاربر دکمه رمزنگاری را زد ، اطلاعات رمز نگاری شود و در صورتی که دکمه رمزگشایی را زد،اطلاعات به صورت اولیه برگردد.
حال شاید این سوال برای شما پیش آمده باشد که رمز نگاری یا همان encryption به چه معناست ؟
رمزنگاری یا رمزگذاری (Encryption) فرآیند تبدیل و ذخیره اطلاعات با استفاده از یک الگوریتم خاص برای محافظت از آنها است در هر رمز گذاری یک کلید الگوریتم وجود دارد که تنها در اختیار خود رمزگذار می باشد. از این کلید برای معکوس کردن عمل رمز نگاری و اصطلاحاً رمزگشایی یا Decryption استفاده می شود.
در این آموزش قصد داریم با تلکنولوژی WPF به پیاده سازی این نمونه بپردازیم.
برای شروع ویژوال استادیو را باز کرده و یک پروژه از نوع WPF ایجاد میکنیم
حال روی پروژه راست کلیک کرده و یک کلاس به نام CryptoEngine با دو متد برای رمزنگاری و رمزگشایی ایجاد میکنیم
public static string Encrypt(string input, string key) { byte[] inputArray = UTF8Encoding.UTF8.GetBytes(input); TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider(); tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key); tripleDES.Mode = CipherMode.ECB; tripleDES.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = tripleDES.CreateEncryptor(); byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length); tripleDES.Clear(); return Convert.ToBase64String(resultArray, 0, resultArray.Length); } public static string Decrypt(string input, string key) { byte[] inputArray = Convert.FromBase64String(input); TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider(); tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key); tripleDES.Mode = CipherMode.ECB; tripleDES.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = tripleDES.CreateDecryptor(); byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length); tripleDES.Clear(); return UTF8Encoding.UTF8.GetString(resultArray); } }
همان طور که در کد بالا مشاهد میکنید دو متد در این کلاس وجود دارد که در هر دو متد cipherMode و paddingMode استفاده شده است و راه های زیادی به جای استفاده از این متد وجود دارد که ما در این آموزش از این روش استفاده کرده ایم ما به هردو این پارامتر ها ، یک پارامتر به عنوان کلید ارجاع داده ایم و این کلید ها در واقع برای آن است که تعدادکاکتر هایی که میخواهید رمزنگاری و رمزگشایی کنید باید 128 بیت یا 192 بیت باشد و اگر شما نمیدانید تعداد کارکتر ها چند بیت هستند در پایین یک نرم افزار دیگر برای تعداد بیت کاکتر هایی که میخواهید رمزنگاری یا رمزگشایی کنید را به ما میدهد
حال برای استفاده از این در کلاس در برنامه ابتدا فرم خود را به صورت زیر طراحی کنید .
حال در رویداد کلیک دکمه Encryptbtn کد زیر را برای رمزنگاری اطلاعات وارد شده مینویسیم.
private void encryptbtn_Click(object sender, RoutedEventArgs e) { if(plaintext.Text!= string.Empty) { //Here key is of 128 bit //Key should be either of 128 bit or of 192 bit Ciphertext.Text = CryptoEngine.Encrypt(plaintext.Text, "sblw-3hn8-sqoy19"); } }
و در رویداد کلیک دکمه نیز Decryptbtn کد زیر را برای رمز گشایی اطلاعات رمز شده مینویسیم.
private void decryptbtn_Click(object sender, RoutedEventArgs e) { if(Ciphertext.Text != string.Empty) { //Key shpuld be same for encryption and decryption decryptedtext.Text = CryptoEngine.Decrypt(Ciphertext.Text, "sblw-3hn8-sqoy19"); } }
و در آخر از برنامه اجرا بگیرید .
ابتدا اطلاعات مورد نظر را در textbox اول وارد میکینم و سپس بازدن دکمه Encryption اطلاعاتی را که وارد کرده اید به صورت رمزنگاری شده نشان داده خواهد شد.
حال برای رمزگشایی اطلاعات کافی است دکمه Decrypt را انتخاب کنیم
موفق باشید
- WPF
- 8k بازدید
- 14 تشکر