تور لحظه آخری
امروز : سه شنبه ، 13 آذر 1403    احادیث و روایات:  امام علی (ع):هيچ آيينى، با نادانى رُشد نمى كند.
سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون شرکت ها

تبلیغات

تبلیغات متنی

صرافی ارکی چنج

صرافی rkchange

سایبان ماشین

دزدگیر منزل

تشریفات روناک

اجاره سند در شیراز

قیمت فنس

armanekasbokar

armanetejarat

صندوق تضمین

Future Innovate Tech

پی جو مشاغل برتر شیراز

آراد برندینگ

خرید یخچال خارجی

موسسه خیریه

واردات از چین

حمية السكري النوع الثاني

ناب مووی

دانلود فیلم

بانک کتاب

دریافت دیه موتورسیکلت از بیمه

طراحی سایت تهران سایت

irspeedy

درج اگهی ویژه

تعمیرات مک بوک

دانلود فیلم هندی

قیمت فرش

درب فریم لس

زانوبند زاپیامکس

روغن بهران بردبار ۳۲۰

قیمت سرور اچ پی

خرید بلیط هواپیما

بلیط اتوبوس پایانه

قیمت سرور dl380 g10

تعمیرات پکیج کرج

لیست قیمت گوشی شیائومی

خرید فالوور

پوستر آنلاین

بهترین وکیل کرج

بهترین وکیل تهران

خرید اکانت تریدینگ ویو

خرید از چین

خرید از چین

تجهیزات کافی شاپ

ساختمان پزشکان

محصولات فوراور

خرید سرور اچ پی ماهان شبکه

دوربین سیمکارتی چرخشی

همکاری آی نو و گزینه دو

کاشت ابرو طبیعی و‌ سریع

الک آزمایشگاهی

الک آزمایشگاهی

خرید سرور مجازی

قیمت بالابر هیدرولیکی

قیمت بالابر هیدرولیکی

قیمت بالابر هیدرولیکی

لوله و اتصالات آذین

قرص گلوریا

نمایندگی دوو در کرج

خرید نهال سیب

وکیل ایرانی در استانبول

وکیل ایرانی در استانبول

وکیل ایرانی در استانبول

رفع تاری و تشخیص پلاک

پرگابالین

دوره آموزش باریستا

مهاجرت به آلمان

بهترین قالیشویی تهران

بورس کارتریج پرینتر در تهران

تشریفات روناک

نوار اخطار زرد رنگ

ثبت شرکت فوری

تابلو برق

 






آمار وبسایت

 تعداد کل بازدیدها : 1837532397




هواشناسی

نرخ طلا سکه و  ارز

قیمت خودرو

فال حافظ

تعبیر خواب

فال انبیاء

متن قرآن



اضافه به علاقمنديها ارسال اين مطلب به دوستان آرشيو تمام مطالب
archive  refresh

به رمز درآوردن اطلاعات


واضح آرشیو وب فارسی:سایت دانلود رایگان: تا به حال به این فکر افتاده اید که یک سری اطلاعات را به صورت رمز در آورید و از دید کاربر پنهان کنید؟ برای مثال یک QueryString یا اطلاعات ذخیره شده داخل یک کوکی. گاهی هم بد نیست بعضی از اطلاعات داخل بانک اطلاعاتی خود را به صورت رمز ذخیره کنید تا در صورت سرقت آن، حداقل برخی اطلاعات حساس شما تا حدی محفوظ بماند. در این مقاله سعی میکنیم یک روش استاندارد برای به رمز در آوردن رشته ها را با هم مرور کنیم.

--------------------------------------------------------------------------------

برای اینکه همراه ما پیش بروید در VS.net یک پروژه جدید C# Application به صورت ASP.net Web Application ایجاد کنید. WebForm1.aspx به صورت پیش فرض در مقابل شما قرار میگیرد، از Toolbox یک Label داخل WebForm1 درگ کنید، به صورت پیش فرض نام آن Label1 خواهد بود.


معرفی Base64String

Base64String نوعی از String است (و با خصوصیات یک string معمولی) که کاربر نمیتواند آن را تشخیص دهد، (اگر کسی را میشناسید که میتواند به من هم بگویید!) برای مثال جمله "I LOVE ASP.net"، در Base64String میشود "SSBMT1ZFIEFTUC5uZXQ=". اما چطور؟


string String = "I LOVE ASP.net";
byte [] Byte = System.Text.Encoding.ASCII.GetBytes(String);
Label1.Text = Convert.ToBase64String(Byte);
در خط اول ما یک string معمولی را ساختیم در خط بعدی آن را به byte تبدیل کردیم و Byte نامیدیم، در خط سوم Byte را به صورت Base64String در آوردیم و توسط Label1 به نمایش در آوردیم. فکر خوبی است که عملیات رمز سازی را همین جا تمام کنیم چون Base64String برای کاربر معمولی قابل مشاهده نیست! اما اگر چند خط بالا را با این خط ها عوض کنیم چه میشود؟


string MyBase64String = "SSBMT1ZFIEFTUC5uZXQ=";
byte[] MyByte =Convert.FromBase64String(MyBase64String);
Label1.Text = System.Text.Encoding.ASCII.GetString(MyByte);

حدس بزنید نتیجه چه میشود؟! بله "I LOVE ASP.net"! در حقیقت ما همان راهی را که رفته بودیم برگشتیم! ابتدا Base64String را به byte تبدیل کردیم و سپس byte را به string معمولی. پس اگر برای ما مهم باشد که اطلاعات رمز شده ما برای کسی قابل بازگشت نباشد هنوز کارمان تمام نشده است. حالا که یاد گرفته اید با Base64String کار کنید بگویید:

"VHJ5IHRvIGZpbmQgd2hhdCB5b3UgbmV2ZXIgbG9vc2U= " چیست ؟! من جوابش را پیدا کردم و به صورت رمز در آوردم "jcUKVu8D4dlpy4BHw6bgefaVMWW9x0qV " جواب است ، امتحان کنید آن را به روش قبلی به string تبدیل کنید و ببیند آیا به جواب منطقی می رسید؟ برای رسیدن به جواب اصلی باید بتوانید آن را رمز گشایی کنید!


Cryptography با استفاده از TripleDES و MD5

در بالا با Base64String آشنا شدیم حالا وقت آن است که با یکی از روشهای معمول رمز سازی در دات نت آشنا شویم این روش فقط یکی از روشهای معمول رمزسازی در دات نت است برای آشنایی با روشهای دیگر از MSDN راهنمایی بگیرید . بیایید ابتدا با عبارتهای تازه‌ی این مبحث آشنا شویم:

TripleDES: برای رمز سازی سه بار از الگوریتم DES استفاده میکند.
DES: مخفف Data Encryption Standard.
MD5: یک الگوریتم کار آمد رمز سازی است که در بسیاری از زبانهای برنامه نویسی دیگر نیز و جود دارد. MD5 عضوی با نام ComputeHash دارد که یک تابع Hash یا (Hash function) است.

توابع Hash یا (Hash functions) یک binary string با طول دلخواه را به یک binary string با طول کوتاه و ثابت! تبدیل میکند، و این خاصیت را دارد که هرگز برای دو ورودی مجزا یک خروجی یک یکسان وجود نخواهد داشت (به عبارت دیگر توابع Hash تضمین میکنند که هر ورودی خروجی منحصر به فردی را داشته باشد). خوب برای به رمز در آورن کافی است مانند مثال زیر عمل کنیم (فعلا آن را اجرا نکنید!):



byte[] IV = new byte[8] {240, 32, 45, 29, 0, 76, 173, 59};
string cryptoKey = "All you need is Love";
string MyString = "I LOVE ASP.net";
byte[] buffer = System.Text.Encoding.ASCII.GetBytes(MyString);
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();
des.Key = MD5.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(cryptoKey));
des.IV = IV;
byte[] CodedBuffer = des.CreateEncryptor().TransformFinalBlock(buffer,0,buffer.Length);
Label1.Text = System.Convert.ToBase64String(CodedBuffer,0,CodedBuffer.Length);

ابتدا بگذارید ببینیم IV و cryptoKey چیستند؟
DESCryptoServiceProvider (و به دنبال آن TripleDESCryptoServiceProvider) دارای یک Key و یک IV مخفف Initialization Vector هستند که برای رمز کردن داده ها از آن استفاده میشود (همان طور که لازم نیست بدانیم کی برد و موس چگونه دستورات ما را به سخت افزار کامپیوتر منتقل میکنند تا از آنها استفاده کنیم، لازم نیست به دنبال این باشیم که Key و IV در DESCryptoServiceProvider دقیقا چگونه کار میکنند فقط کافی است بدانیم از آنها چطور استفاده کنیم). باید توجه داشته باشیم اگر فراموش کنیم IV را مقدار دهی کنیم در هنگام اجرا IV یک مقدار تصادفی خواهد گرفت که برگردان داده های رمز شده را غیر ممکن میکند!

در مثال بالا IV را از جنس byte تعریف کردیم و cryptoKey از جنس string به صورت "All you need is Love" مقدار دهی کردیم که در حقیقت "All you need is Love" کلید رمز ما خواهد بود. MyString همان stringای است که باید به صورت رمز در بیاید. (اگر کمی از #C سر در بیاورید با چند خط بعدی مشکلی نخواهید داشت).

des.Key: حالا وقت آن شده است که Key را مقدار دهی کنیم، اما باید آن را توسط MD5.ComputeHash به صورتی مناسب برای Key بودن تبدیل کنیم و فراموش نکنیم که MD5.ComputeHash، از string به عنوان ورودی نمیتواند استفاده کند و باید قبل از آن cryptoKey خود را به حالت byte تبدیل کرده باشیم (System.Text.ASCIIEncoding.ASCII.GetBytes(cryptoKey)).

و حالا وقت خوبی است تا CreateEncryptor برای رمز سازی اقدام کند و TransformFinalBlock مقدار Hash شده‌ای برای منطقه مشخص شده ای از آرایه های byte مشخص شده حساب میکند. اما توجه داشته باشید که ما byte رمز شده لازم نداریم بلکه string رمز شده میخواهیم پس در قدم آخر باید یک Base64String تولید کنیم.

سوالی که پیش می‌آید این است که TripleDESCryptoServiceProvider و MD5CryptoServiceProvider کجا هستند؟ فضای نام System.Security.Cryptography پاسخ این سوال است پس حالا میتوانید پروژه‌ای را که ایجاد کرده بودیم بیاورید و به جای کد های قبلی کدهای مثال بالا را در آن قرار دهید و فراموش نکنید که namespace جدید را به صورت using System.Security.Cryptography به بالای کدهای خود اضافه کنید.

این روش بر خلاف بعضی از روشهای یک طرفه، قابلیت بازیابی اطلاعات رمز شده را دارا میباشد، فقط کافی است ازCreateDecryptor استفاده کنیم :


byte[] IV = new byte[8] {240, 32, 45, 29, 0, 76, 173, 59};
string cryptoKey = "All you need is Love";
string CodedString64 = "zNvKahC6S/+8xMX3o658wQ==";
byte[] buffer = Convert.FromBase64String(CodedString64);
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();
des.Key = MD5.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(cryptoKey));
des.IV = IV;
byte[] CodedBuffer = des.CreateDecryptor().TransformFinalBlock(buffer,0,buffer.Length);
Label1.Text = System.Text.Encoding.ASCII.GetString (CodedBuffer);

خوب حالا میتوانید به من بگویید "jcUKVu8D4dlpy4BHw6bgefaVMWW9x0qV " (که همان جواب معمای ما هم بود) چیست ؟ صد در صد خیر! مگر اینکه من به شما IV و Key آن را بگویم! IV مانند مثال و Key نیز "red rose" است! حالا اگر مطالب را دنبال کرده باشد احتمالا به راحتی میتوانید رمزگشایی کنید!

چند نکته امنیتی

آیا این روش، روش قابل اطمینانی است؟ باید بگویم تا وقتی نخواهید اطلاعات چند صد هزار دلاری یا اسناد محرمانه ای را به رمز تبدیل کنید احتمالا میتوانید روی آن حساب کنید مخصوصا که TripleDES سه بار با الگوریتم DES آن را به رمز تبدیل کرده است (سه بار رمز شکستن به راحتی سه بار رمز کردن نیست!).
شما میتوانید برای سخت تر کردن کار رمزشکن از Key های مختلفی استفاده کنید ( البته سعی کنید برای رمز کردن کلمه عبور، نام کاربری یا email را به عنوان کلید رمز قرار ندهید! چون شما جزو اولین 10000 نفری نیستید که این کار را کرده اند!). حفاظت اطلاعات شما در گروی امن بودن server ای است که سایت شما روی آن قرار دارد، همینطور از قرار دادن Key در Web.config به عنوان یک کار خلاقانه! جدا خودداری کنید.





این صفحه را در گوگل محبوب کنید

[ارسال شده از: سایت دانلود رایگان]
[مشاهده در: www.freedownload.ir]
[تعداد بازديد از اين مطلب: 370]

bt

اضافه شدن مطلب/حذف مطلب




-


گوناگون

پربازدیدترینها
طراحی وب>


صفحه اول | تمام مطالب | RSS | ارتباط با ما
1390© تمامی حقوق این سایت متعلق به سایت واضح می باشد.
این سایت در ستاد ساماندهی وزارت فرهنگ و ارشاد اسلامی ثبت شده است و پیرو قوانین جمهوری اسلامی ایران می باشد. لطفا در صورت برخورد با مطالب و صفحات خلاف قوانین در سایت آن را به ما اطلاع دهید
پایگاه خبری واضح کاری از شرکت طراحی سایت اینتن